Kotlin 介面
Kotlin 介面與 Java 8 類似,使用 interface 關鍵字定義介面,允許方法有默認實現:
interfaceMyInterface{funbar()// 未實現funfoo(){//已實現// 可選的方法體println("foo")}}
實現介面
一個類或者對象可以實現一個或多個介面。
classChild : MyInterface{overridefunbar(){// 方法體}}
實例
interfaceMyInterface{funbar()funfoo(){// 可選的方法體println("foo")}}classChild : MyInterface{overridefunbar(){// 方法體println("bar")}}funmain(args: Array<String>){valc = Child()c.foo(); c.bar();
}
輸出結果為:
foo
bar
介面中的屬性
介面中的屬性只能是抽象的,不允許初始化值,介面不會保存屬性值,實現介面時,必須重寫屬性:
interfaceMyInterface{varname:String//name 屬性, 抽象的}classMyImpl:MyInterface{overridevarname: String = "runoob"//重載屬性}
實例
interfaceMyInterface{varname:String//name 屬性, 抽象的funbar()funfoo(){// 可選的方法體println("foo")}}classChild : MyInterface{overridevarname: String = "runoob"//重載屬性overridefunbar(){// 方法體println("bar")}}funmain(args: Array<String>){valc = Child()c.foo(); c.bar(); println(c.name)}
輸出結果為:
foo
bar
runoob
函數重寫
實現多個介面時,可能會遇到同一方法繼承多個實現的問題。例如:
實例
interfaceA{funfoo(){print("A")}// 已實現funbar()// 未實現,沒有方法體,是抽象的}interfaceB{funfoo(){print("B")}// 已實現funbar(){print("bar")}// 已實現}classC : A{overridefunbar(){print("bar")}// 重寫}classD : A, B{overridefunfoo(){super<A>.foo()super<B>.foo()}overridefunbar(){super<B>.bar()}}funmain(args: Array<String>){vald = D()d.foo(); d.bar();}
輸出結果為:
ABbar
實例中介面 A 和 B 都定義了方法 foo() 和 bar(), 兩者都實現了 foo(), B 實現了 bar()。因為 C 是一個實現了 A 的具體類,所以必須要重寫 bar() 並實現這個抽象方法。
然而,如果我們從 A 和 B 派生 D,我們需要實現多個介面繼承的所有方法,並指明 D 應該如何實現它們。這一規則 既適用於繼承單個實現(bar())的方法也適用於繼承多個實現(foo())的方法。


TAG:程序員小新人學習 |