Chiclaim 2019-06-25
Kotlin 中的接口与Java类似,但是它允许有默认实现。这一点与Java 8有些相近,JDK8及以后,允许我们在接口中定义static方法和default方法。
interface MyInterface { fun method1(); fun result():Int fun doIt(){ print("do it") } }
接口的实现
一个类或者对象可以实现一个或多个接口。
class DefaultImpl :MyInterface{ override fun result(): Int { return 0; } override fun method1() { print("override method 1") } }
接口中的属性
接口中的属性只能是抽象的,不允许初始化值
接口不会保存属性值,实现接口时,必须重写属性
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) }
输出结果为:
foo bar runoob
函数重写
实现多个接口时,可能会遇到同一方法继承多个实现的问题。例如:
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() } } fun main(args: Array<String>) { val d = D() d.foo(); d.bar(); }
输出结果为:
ABbar
C 只实现了,只需要重写抽象方法bar().而class D则实现了A,B,而A,B都有方法
foo(),bar(),所以都需要重写,用以指定D如何实现。这与继承中有多个相同方法的处理一样。
欢迎加入学习交流群569772982,大家一起学习交流。