Kotlin支持接口的方法默认实现和抽象属性

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()进行申明。

发布了56 篇原创文章 · 获赞 61 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Agg_bin/article/details/104379535