Overriding def with var in Scala

根据《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只有上述的这一种情况才可以。

你可能感兴趣的:(Overriding def with var in Scala)