解决方法覆写时的冲突
当定义了很多种超类时,这时很容易出现继承了好几个同样的方法。
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()方法,因为这个方法有两个,编译器不知道使用哪个。