我正在学习Scala,我正在阅读(从头到尾)Martin Ordesky的书。在第10章中我发现了这个:
太棒了,我都理解并喜欢这个。所以我试了一个例子:
class Father {
def x = 1 // Method
}
class Child extends Father {
override val x = 1; // Field
}
但是,如果您尝试使用方法覆盖属性:
class Father {
val x = 1; // Field
}
class Child extends Father {
override def x = 1 // Method
}
我收到编译错误:
method x needs to be a stable, immutable value
override def x = 1
如果x
中的Father
为var
,那么它既不起作用
method x cannot override a mutable variable
override def x = 1
所以我们有两个案例(和我的两个问题):
x
不会被一个值随时间变化的方法覆盖?还有其他原因吗?答案 0 :(得分:2)
允许val
覆盖def
需要在生成的构造函数中经历大量的箍,并且子类中会有多余的字段。在技术上可以实现这一点,但没有任何好处。
允许var
覆盖def
是不合理的。分配给它的意思是什么?