美文网首页数客联盟
Overriding def with var in Scala

Overriding def with var in Scala

作者: Woople | 来源:发表于2016-09-25 15:12 被阅读0次

    根据《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

        本文链接:https://www.haomeiwen.com/subject/ercfyttx.html