Kotlin 接口

278 阅读1分钟

1.使用关键字 interface 来定义接口

2.可以有属性但必须声明为抽象或提供访问器实现

3.在接口中声明的属性要么是抽象的,要么提供访问器的实现。在接口中声明的属性不能有幕后字段

// 表达式
interface MyInterface {

	  val prop: Int // 抽象的
    val propertyWithImplementation: String
        get() = "foo"
        
        
    fun bar()
    fun foo() {
      // 可选的方法体
    }
}

// 实现
class Child : MyInterface {

		override val prop: Int = 29
		
    override fun bar() {
        // 方法体
    }
}

继承

一个接口可以从其他接口派生,从而既提供基类型成员的实现也声明新的函数与属性

interface Named {
    val name: String
}

interface Person : Named {
    val firstName: String
    val lastName: String
    
    override val name: String get() = "$firstName $lastName"
}

data class Employee(
    // 不必实现“name”
    override val firstName: String,
    override val lastName: String,
    val position: Position
) : Person

覆盖冲突

interface A {
    fun foo() { print("A") }
    fun bar()
}

interface B {
    fun foo() { print("B") }
    fun bar() { print("bar") }
}

class C : A {
    override fun bar() { print("bar") }
}

class D : A, B {
    override fun foo() {
        super<A>.foo()
        super<B>.foo()
    }

    override fun bar() {
        super<B>.bar()
    }
}