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

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 读《快学Scala 》一书的摘要 Scala 运行于JVM之上,拥有海量类库和工具,兼顾函数式编程和面向对象。 在...
    abel_cao阅读 1,420评论 0赞 8
  • scala文档 包含内容 1基础 2控制结构和函数 3数组相关操作 4映射和元组 5类 6对象 7.包和引入(x)...
    zlcook阅读 1,083评论 0赞 3
  • 变量初始化可以用用 _ 作占位符,赋值为默认值,字符串 null,Float、Int、Double 等为 0var...
    FaDeo_O阅读 1,065评论 0赞 0
  • 官方的文档说明: response.text返回的是Unicode型的数据。 response.content返回...
    東飛阅读 1,004评论 0赞 1
  • 忘了这是第几次她哭着跑出神主殿。他递过去一方纱巾,她扯过纱巾,粉拳雨点一般落下 “我不信,我不信神尊不喜欢我,我不...
    古风啦啦啦阅读 545评论 0赞 3

友情链接更多精彩内容