Kotlin學習(10):介面
阿新 • • 發佈:2019-01-24
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())的方法。