使用預設實現實現多個介面時發生衝突
當實現多個具有包含預設實現的同名方法的介面時,編譯器應該使用哪個實現是不明確的。在發生衝突的情況下,開發人員必須覆蓋衝突方法並提供自定義實現。該實現可以選擇委託給預設實現。
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.
}