使用无参数方法覆盖字段

时间:2014-10-08 13:37:42

标签: scala oop

我正在学习Scala,我正在阅读(从头到尾)Martin Ordesky的书。在第10章中我发现了这个:

enter image description here

太棒了,我都理解并喜欢这个。所以我试了一个例子:

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中的Fathervar,那么它既不起作用

method x cannot override a mutable variable
  override def x = 1

所以我们有两个案例(和我的两个问题):

  • 试图覆盖一个不可改变的字段:这是否被禁止以保证x不会被一个值随时间变化的方法覆盖?还有其他原因吗?
  • 尝试覆盖可变字段:为什么不能覆盖可变字段?我最初认为这是为了避免类用户为无参数方法赋值,但是不应该允许无参数方法。

1 个答案:

答案 0 :(得分:2)

允许val覆盖def需要在生成的构造函数中经历大量的箍,并且子类中会有多余的字段。在技​​术上可以实现这一点,但没有任何好处。

允许var覆盖def是不合理的。分配给它的意思是什么?