Kotlin 与默认实现接口

示例

Kotlin中的接口可以具有功能的默认实现:

interface MyInterface {
    fun withImplementation() {
      print("withImplementation() was called")
    }
}

实现此类接口的类将能够使用这些功能而无需重新实现

class MyClass: MyInterface {
    // 无需在这里重新实现
}
val instance = MyClass()
instance.withImplementation()

物产

默认实现也适用于属性获取器和设置器:

interface MyInterface2 {
    val helloWorld
        get() = "你好,世界!"
}

接口访问器实现不能使用后备字段

interface MyInterface3 {
    // 此属性将无法编译!
    var helloWorld: Int
        get() = field
        set(value) { field = value }
}

多种实现

当多个接口实现相同的功能,或者所有接口都定义一个或多个实现时,派生类需要手动解析正确的调用

interface A {
    fun notImplemented()
    fun implementedOnlyInA() { print("only A") }
    fun implementedInBoth() { print("both, A") }
    fun implementedInOne() { print("implemented in A") }
}

interface B {
    fun implementedInBoth() { print("both, B") }
    fun implementedInOne() // 仅定义
}

class MyClass: A, B {
    override fun notImplemented() { print("Normal implementation") }

    // 可以在实例中正常使用ImplementedOnlyInA()

    // 类需要定义如何使用接口函数
    override fun implementedInBoth() {
        super<B>.implementedInBoth()
        super<A>.implementedInBoth()
    }

    // 即使只有一个实现,也会有多个定义
    override fun implementedInOne() {
        super<A>.implementedInOne()
        print("implementedInOne class implementation")
    }
}