重写属性

重写属性与重写方法类似;在超类中已经定义过的属性如果在子类中也定义必须要加上override,并且它们必须要有兼容的类型。每个被定义的属性可以通过初始化一个属性或初始化属性的getter方法进行覆盖。

open class Foo {
    open val x: Int get { ... }
}
class Bar1 : Foo() {
    override val x: Int = ...
}

你可以使用var属性覆写val属性,但是反过来不行。这是因为一个val属性本质上会定义一个getter方法,覆写这个属性为var属性会额外的在子类增加一个setter方法。

需要注意的是,可以使用override关键字作为主构造器中参数的一部分。

interface Foo {
    val count: Int
}
class Bar1(override val count: Int) : Foo
class Bar2 : Foo {
    override var count: Int = 0
}

results matching ""

    No results matching ""