Scala:扩展包含';应用';方法
“common”模块中有一个基类,如下所示:Scala:扩展包含';应用';方法,scala,Scala,“common”模块中有一个基类,如下所示: class BaseClass(args: Seq[String] = Seq()) extends Serializable { private val argMap: Map[String, String] = // <More code here...> object BaseClass { def apply(args: Seq[String] = Seq()): BaseClass = new BaseClass(
class BaseClass(args: Seq[String] = Seq()) extends Serializable {
private val argMap: Map[String, String] =
// <More code here...>
object BaseClass {
def apply(args: Seq[String] = Seq()): BaseClass = new BaseClass(args)
}
我的理解是,当我实例化MyNewClass时,它会自动实例化并调用基类的“apply”方法,但这并没有发生。什么是扩展基类的合适方法,使其所有变量和方法都可以通过子类访问
我的理解是,当我实例化MyNewClass时,它会自动实例化并调用基类的“apply”方法
你的理解不太正确
扩展com.xyz.BaseClass
表示该类继承自基本类
,而不是单例对象
和new com.xyz.MyNewClass(args)
创建指定类的新实例,绕过任何伴随对象中的apply()
方法
什么是扩展基类的合适方法,使其所有变量和方法都可以通过子类访问
当前代码正是这样做的
MyNewClass
及其伴生对象从BaseClass
继承所有成员。由于不能扩展对象
,并且没有从BaseClass
继承访问权限,因此,当基类
实例可以访问基类
伴随对象的私有成员时,不会从基类
继承任何内容,MyNewClass
实例无法调用。您可能想调用协构造函数:类MyNewClass(args:Seq[String]=Seq())扩展com.xyz.BaseClass(args)
就是这么简单。感谢@LuisMiguelMejíaSuárezThanks的解释。有道理!在调用类中,我按照@LuisMiguelMejíaSuárez的建议添加了新的MyNewClass(args)&它正在工作。你的解释有助于了解更多,所以谢谢你。
class MyNewClass(args: Seq[String] = Seq()) extends com.xyz.BaseClass {
// Add additional code here
}
object MyNewClass extends com.xyz.BaseClass {
def apply(args: Seq[String] = Seq()): MyNewClass = new com.xyz.MyNewClass(args)
}