Kotlin 中的接口與Java類似,但是它允許有默認實現(xiàn)。這一點與Java 8有些相近侮繁,JDK8及以后,允許我們在接口中定義static方法和default方法赖条。
interface MyInterface {
fun method1();
fun result():Int
fun doIt(){
print("do it")
}
}
接口的實現(xiàn)
一個類或者對象可以實現(xiàn)一個或多個接口失乾。
class DefaultImpl :MyInterface{
override fun result(): Int {
return 0;
}
override fun method1() {
print("override method 1")
}
}
接口中的屬性
- 接口中的屬性只能是抽象的,不允許初始化值
- 接口不會保存屬性值纬乍,實現(xiàn)接口時碱茁,必須重寫屬性
interface MyInterface{
var name:String //name 屬性, 抽象的
}
class MyImpl:MyInterface{
override var name: String = "runoob" //重載屬性
}
Demo
interface MyInterface {
var name:String //name 屬性, 抽象的
fun bar()
fun foo() {
// 可選的方法體
println("foo")
}
}
class Child : MyInterface {
override var name: String = "runoob" //重寫屬性
override fun bar() {
// 方法體
println("bar")
}
}
fun main(args: Array<String>) {
val c = Child()
c.foo();
c.bar();
println(c.name)
}
輸出結(jié)果為:
foo
bar
runoob
函數(shù)重寫
實現(xiàn)多個接口時,可能會遇到同一方法繼承多個實現(xiàn)的問題仿贬。例如:
interface A {
fun foo() { print("A") } // 已實現(xiàn)
fun bar() // 未實現(xiàn)纽竣,沒有方法體,是抽象的
}
interface B {
fun foo() { print("B") } // 已實現(xiàn)
fun bar() { print("bar") } // 已實現(xiàn)
}
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()
}
}
fun main(args: Array<String>) {
val d = D()
d.foo();
d.bar();
}
輸出結(jié)果為:
ABbar
Note:C 只實現(xiàn)了茧泪,只需要重寫抽象方法bar().而class D則實現(xiàn)了A,B蜓氨,而A,B都有方法
foo(),bar(),所以都需要重寫,用以指定D如何實現(xiàn)队伟。這與繼承中有多個相同方法的處理一樣穴吹。