Kotlin对于接口的设计和Java并不完全相同,它增强了接口的功能,比如如下两个:接口方法支持默认实现、接口中支持抽象属性。例子如下:
interface Flyer {
val speed: Int
val height
get() = 1000
fun kond()
fun fly() {
println("I can fly")
}
}
1、接口方法支持默认实现
Java 8引入了一个新特性——接口方法支持默认实现,Kotlin的这个设计应该是向Java8看齐,默认实现方法fly()转换为Java代码如下:
void fly();
public static final class DefaultImpls {
public static void fly(Flyer $this) {
String var1 = "I can fly";
System.out.println(var1);
}
}
也就是在接口中定义了静态内部类去实现。
2、 接口中支持抽象属性
Java中是没有抽象属性的,因为abstract只能修饰类和方法,所以接口的属性都是常量,不支持抽象属性。然而Kotlin作为更好的Java,它的接口支持抽象属性,是因为背后通过Java中的抽象方法来实现的,比如属性speed转换为Java代码如下:
int getSpeed();
注意:
1、Kotlin接口中的属性,同方法一样,若没有指定默认行为,则在实现该接口的类中必须对该属性进行初始化。
2、若要指定属性默认行为,需要像属性height一样用get()进行申明。