Lif*_*ang 3 oop overriding scala
在Scala中,有四种成员修改,即def
,val
,lazy val
,var
.关于覆盖的规则看似复杂且不一致,例如,def
可以被覆盖val
,而不是相反.很高兴看到所有这些规则的完整列表.
scala中的所有重叠都分为两类,第一种情况是覆盖抽象成员(in trait
或abstract class
),另一种是覆盖具体成员:
def
,val
,lazy val
,var
可能都在子类中重写:
def
:可以通过各种部件(被覆盖def
,val
,lazy val
,和var
).
val
:只能被覆盖val
.
lazy val
:只能被覆盖lazy val
.
var
:混凝土var
不能被覆盖.
lazy val
不能是抽象的,所以只有三个规则:
def
:可以通过各种部件(被覆盖def
,val
,lazy val
,和var
).
val
:可以被val
和重写lazy val
.
var
:可以通过(1)覆盖var
,或者(2)一对由实施读操作和写操作的def
,val
或lazy val
.
编辑:
正如@iuriisusuk所指出的,请参阅规范中的相关部分以获得正式描述.