使用默认实现实现多个接口时发生冲突

当实现多个具有包含默认实现的同名方法的接口时,编译器应该使用哪个实现是不明确的。在发生冲突的情况下,开发人员必须覆盖冲突方法并提供自定义实现。该实现可以选择委托给默认实现。

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