接口
学习一下Kotlin中接口相关的语法,和Java 8差不多。可以包含抽象的方法定义,还可以拥有一些属性,以及非抽象的方法。
1、interface
Kotlin中也是用interface定义接口:
interface Fruit {
//
}不需要open关键字修饰接口,实现一个接口如下,使用冒号:,而不是Java中的implement关键字。
class Apple : Fruit {
}2、成员变量
2.1、接口中定义属性
接口中定义的成员变量:
interface Fruit {
var name: String
}接口中的变量不允许初始化赋值。

2.2、实现接口中的属性
实现一个接口,在Kotlin中强制要求使用“覆写”override修饰符,来备注被重写的父类或者接口中的方法和属性。初始化接口中的变量:
class Apple : Fruit {
override var name: String = "name"
}3、成员方法
接口中定义的方法是抽象方法,无需实现
interface Fruit {
fun name()
}当然也可以给一个默认的实现,在Java 8中也可以给接口中的方法一个默认实现,不过需要用default关键字修饰。
interface Fruit {
fun name(){}
}使用关键字override实现接口中的方法
class Apple : Fruit {
override fun name() {
//实现接口中的方法,或者覆盖接口中的默认方法
}
}4、多重继承
继承只能继承一个父类,但是继承可以同时继承多个接口。
4.1、显示实现方法
如果接口中的方法都是抽象的,那么相同的方法名都“归并”为一个,在实现类中实现:
interface Fruit {
fun name()
}
interface Food {
fun name()
}
class Apple : Fruit, Food {
override fun name() {
//同时实现了上面两个接口的name()方法
}
}4.2、super<>
接口中的方法都有默认的实现,子类必须提供一个显示的实现方法。并且可以在子类中通过super<Interface>.fun()调用指定接口中的默认方法:
//接口1
interface Fruit {
fun name() {}
}
//接口2
interface Food {
fun name() {}
}
//同时实现上面的两个或者更多的接口
class Apple : Fruit, Food {
override fun name() {
super<Fruit>.name()
super<Food>.name()
}
}学习资料:

