覆写规则

覆写时需要遵循一定的规则:如果一个类继承了多个超类的同名成员,子类必须重写这个成员并提供自己的实现方式。为了区分成员属于哪个超类,使用super关键字并且使用<>包含超类,比如:super<Base>。

open class A {
    open fun f() { print("A") }
    fun a() { print("a") }
}
interface B {
    fun f() { print("B") }
    fun b() { print("b") }
}
class C() : A(), B {
    override fun f() {
        super<A>.f() // call to A.f()
        super<B>.f() // call to B.f()
    }
}

在上述的继承关系中,a()和b()方法的继承对于C没有任何问题,因为它们都是单个的实现。但是对于f(),存在两种实现,因此我们需要覆盖f()并提供我们自己的实现来消除不确定性。

results matching ""

    No results matching ""