Scala:扩展包含';应用';方法

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(

“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(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)
}