【发布时间】:2015-07-14 05:31:30
【问题描述】:
为什么不能在 scala 中覆盖可变变量?
class Abs(var name: String){
}
class AbsImpl(override var name: String) extends Abs(name){
}
上面的代码给出了以下编译时错误:-
variable name cannot override a mutable variable
如果 name 声明为 val,那么上面的代码可以正常工作。
【问题讨论】:
-
为什么有人要
override和var?覆盖 var 是什么意思? -
因为覆盖它并没有多大意义。它是可变的,你可以改变它。压倒一切甚至意味着什么? stackoverflow.com/questions/16413986/…
-
@Sarvesh:感谢您的快速回复。我只是想了解,为什么允许 val ?
-
因为 val 有一个固定值。当你覆盖它时你可以改变它。
-
@Falmarri 因为您可能需要构造函数的参数来设置此变量的值,并且 override 将让此参数与此变量具有完全相同的名称,因为它将是这个变量。到目前为止,您需要为这个参数想出一个新名称。我使用带有尾随下划线的 myvar_ 作为参数的约定,该参数将设置一个同名的 var,减去下划线,并且永远不应再次使用。
标签: scala inheritance overriding