scala - Scala:扩展包含“应用”方法的基类
问题描述
我在“通用”模块中有一个基类,如下所示:
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)
}
现在我想在我的“模块”中扩展这个 BaseClass,所以我正在尝试这个......
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)
}
我的理解是,当我实例化 MyNewClass 时,它会自动实例化并调用基类的“应用”方法,但这并没有发生。什么是扩展 BaseClass 使其所有变量和方法都可以通过 Child 类访问的正确方法?
解决方案
我的理解是,当我实例化 MyNewClass 时,它会自动实例化并调用基类的“应用”方法......
你的理解不太对。
extends com.xyz.BaseClass
意味着这个类继承自基类class
,而不是单例类object
。
并new com.xyz.MyNewClass(args)
创建指定类的新实例,绕过apply()
任何伴随对象中的方法。
什么是扩展 BaseClass 使其所有变量和方法都可以通过 Child 类访问的正确方法?
当前的代码正是这样做的。MyNewClass
及其伴生对象从 继承所有成员BaseClass
。没有任何东西是从BaseClass
伴随对象继承的,因为你不能扩展object
,并且你没有继承访问权限,BasseClass
所以虽然实例可以访问伴随对象的BaseClass
私有成员,但实例不能。BaseClass
MyNewClass
推荐阅读
- c - 解析混合类型数据的最佳实践?
- swift - 输入验证-Swift
- java - 使用 ConstraintSet 时测量的布局大小为零
- firebase - 如何订阅flutter FCM中的主题?
- python - 如何生成没有重复成员的随机列表?
- python - 如何引导 numpy 数组的最里面的数组?
- mysql - 无法在 Linux 中启动 MySQL
- azure-service-fabric - 如何在 Azure Service Fabric 运行状况不佳时发送警报
- php - 如果条件和条件分组不起作用
- google-cloud-firestore - 如何在 Firestore 上读取/写入特定数据