Scala 2.8:如何初始化子类
|
考虑以下代码:
abstract class X {
def a:Unit
a
}
class Y extends X {
var s:String = \"Hello\"
def a:Unit = println (\"String is \"+s)
}
这给出以下输出:
scala> new Y
String is null
res6: Y = Y@18aeabe
如何在调用a
时让父类X
等待s
初始化
没有找到相关结果
已邀请:
1 个回复
届甸衬丝蚕
的调用发生在子类中设置set6ѭ之前。 通常,从构造函数中调用虚拟方法是个坏主意。 C ++甚至不允许它(或者,不是从超级类的构造函数调用子类中实现的方法,而不是不允许它)。 但是,如果将ѭ8中的ѭ6变成ѭ9或
,则可以修复它。
会在首次访问它们的值时被初始化,无论是由谁进行的; ѭ10不会引起像ѭ13或
这样的初始化问题。但是,请注意不要在
的实现中调用任何其他未初始化的结构,因为相同的问题将再次出现。 编辑: 您还可以使用Scala的“早期定义”(或早期初始化)功能: