根据《Scala for the Impatient》中第8章Table8-2所列的内容
Override def with var: A var can override a
getter/setter pair. Overriding just a getter is an error.
那么如何理解这句话呢?
abstract class Person {
def id: Int
}
class Student extends Person{
override var id = 9527 //Error: method id_= overrides nothing
}
在scala中定义了一个var变量,会自动生成getter和setter方法。
那么如果父类中只定义了一个方法def id: Int
,用来生成用户的id,而子类用var变量重写这个方法的话override var id = 9527
,编译会报错method id_=overrides nothing
,从报错中可以看出来,由于scala会为var变量自动生成了一个setter方法(id_),但是父类并没有这个方法,所以是无法重写的。
abstract class Person {
def id: Int
def id_=(value: Int) //父类必须有set方法
}
class Student extends Person{
override var id = 9527 //为var变量自动生成get和set方法
}
所以,用var重写父类中的def只有上述的这一种情况才可以。
网友评论