1. 程式人生 > >Kotlin學習(10):介面

Kotlin學習(10):介面

1、定義介面

Kotlin的介面與Java 8類似,既包含抽象方法的宣告,也包含實現。與抽象類不同的是,介面無法儲存狀態。它可以有屬性但必須宣告為抽象或提供訪問器實現。

使用關鍵字interface來定義介面:

interface MyInterfaec {
    fun bar()
    fun foo() {
        //可選的方法體
    }
}

2、實現介面

一個類或者物件可以實現一個或多個介面。

class Child:MyInterfaec{
    override fun bar() {
        //方法體
    }
}

3、介面中的屬性

在介面中宣告的屬性要麼是抽象的,要麼提供訪問器的實現。在介面中宣告的屬性不能有幕後欄位,因此介面中宣告的訪問器不能引用它們。

interface Father {
    val prop: Int

    val zoo: String
        get() = "foo"

    fun foo() {
        print(prop)
    }
}

class Son : Father {
    override val prop: Int
        get() = 20
}

3、解決覆蓋衝突

實現多個介面時,可能是會遇到同一方法繼承多個實現的問題,例如:

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() } }

上例中,介面A和B都定義了foo()和bar()。兩者都實現了foo(),但是隻有B實現了bar()。因為C是一個實現了A的具體類,所有必須要重寫bar()並實現這個抽象方法。

然而,如果我們從A和B派生出D,我們需要實現我們從多個介面繼承的所有方法,並指明D應該如何實現它們。這一規則既適用於繼承單個實現(bar())的方法也適用於繼承多個實現(foo())的方法。