接口

QuibblerQuibbler 2020-06-14 约 4 分钟 1997 次阅读

接口

学习一下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()
    }
}

学习资料:

        Kotlin 接口

        如何在Kotlin中创建匿名接口的实例

        

相关推荐

Parcelize:Parcelable 实现生成器
Kotlin

Parcelize:Parcelable 实现生成器

Parcelize:Parcelable 实现生成器Parcelable是安卓开发中常用的序列化方式,之前分享过一个Parcelable序列化插件,方便开发者快速生成代码,提高开发效率。1、Parcelize插件Kotlin官方也推出一个Parcelable自动生成的Gradle插件:Parcelize。1.1、引入插件在项目的build.gradle中添加:id("kotlin-parceliz

3.2k
Kotlin的继承
Kotlin

Kotlin的继承

Kotlin的继承1、超类:Any类似于Java中的Object类,Kotlin也有一个叫Any的超类,是所有类的父类,所有类都默认继承自该类。超类的定义如下,其中定义了三个函数:2、open注意上面的Any类用open修饰,表示该类可以被继承。Kotlin中的类默认都是final的,无法被继承:如果想让类可以被继承,就需要用在定义类的地方用open关键字标识该类可以被继承。3、构造器继承中涉及到

2.7k
Kotlin循环语句
Kotlin

Kotlin循环语句

Kotlin循环语句每门语言都要学一下循环语句,虽然每种语言都有for、while等循环,但总有些各自的特色。1、for循环for循环遍历集合或者数组,使用 in 关键字遍历任何提供迭代器。语法:例:先定义一个数组或集合array:遍历集合array:通常还需要用到索引index,调用集合的withIndex()方法参与循环遍历。例:使用下面的方式遍历for循环,同时获取元素当前索引index和当

2.5k