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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 讀《快學Scala 》一書的摘要 Scala 運行于JVM之上,擁有海量類庫和工具,兼顧函數式編程和面向對象。 在...
    abel_cao閱讀 1,291評論 0 8
  • scala文檔 包含內容 1基礎 2控制結構和函數 3數組相關操作 4映射和元組 5類 6對象 7.包和引入(x)...
    zlcook閱讀 1,016評論 0 3
  • 變量初始化可以用用 _ 作占位符,賦值為默認值,字符串 null,Float、Int、Double 等為 0var...
    FaDeo_O閱讀 937評論 0 0
  • 官方的文檔說明: response.text返回的是Unicode型的數據。 response.content返回...
    東飛閱讀 929評論 0 1
  • 忘了這是第幾次她哭著跑出神主殿。他遞過去一方紗巾,她扯過紗巾,粉拳雨點一般落下 “我不信,我不信神尊不喜歡我,我不...
    古風啦啦啦閱讀 435評論 0 3