解决方法覆写时的冲突

当定义了很多种超类时,这时很容易出现继承了好几个同样的方法。

interface A {
    fun foo() { print("A") }
    fun bar()
}
interface B {
    fun foo() { print("B") }
    fun bar() { print("bar") }
}
class C : A {
    override fun bar() { print("bar") }
}
class D : A, B {
    override fun foo() {
        super<A>.foo()
        super<B>.foo()
    }

    override fun bar() {
        super<B>.bar()
    }
}

接口A和接口B都定义了foo()和bar()方法。这里需要注意的是如果接口中的方法没有主体部分,那么函数就会被标记为抽象方法,这时接口中的默认行为。在上述的例子中,如果实体类C实现了A接口,那么明显的需要重写bar()方法并提供一个具体的实现。

然而,如果类D实现了接口A、接口B,我们需要实现所有从接口继承下来的方法。在上面的例子中,D不需要重写bar方法,因为它已经继承了B接口的bar()方法,但是需要重写foo()方法,因为这个方法有两个,编译器不知道使用哪个。

results matching ""

    No results matching ""