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,大家一起学习交流。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。