使用預設實現實現多個介面時發生衝突

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

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.
}