使用默认实现实现多个接口时发生冲突
当实现多个具有包含默认实现的同名方法的接口时,编译器应该使用哪个实现是不明确的。在发生冲突的情况下,开发人员必须覆盖冲突方法并提供自定义实现。该实现可以选择委托给默认实现。
interface FirstTrait {
fun foo() { print("first") }
fun bar()
}
interface SecondTrait {
fun foo() { print("second") }
fun bar() { print("bar") }
}
class ClassWithConflict : FirstTrait, SecondTrait {
override fun foo() {
super<FirstTrait>.foo() // delegate to the default implementation of FirstTrait
super<SecondTrait>.foo() // delegate to the default implementation of SecondTrait
}
// function bar() only has a default implementation in one interface and therefore is ok.
}