根據《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只有上述的這一種情況才可以。