【4】Kotlin基础——接口的多种使用

提示:此文章仅作为本人记录日常学习使用,若有存在错误或者不严谨得地方,欢迎各位在评论中指出。

文章目录

  • 一、接口
    • 1.1 接口的声明与实现
    • 1.2 面向接口编程(多态)
    • 1.3 接口的默认实现函数
    • 1.4 Kotlin语言中的修饰符

一、接口

Kotlin语言和Java语言都是单继承结构,即一个类最多只能继承一个父类,但是却可以实现任意多个接口。(注意这里的"最多"代表0个或1个)

1.1 接口的声明与实现

我们先来了解一下如何用Kotlin语言声明一个接口。在下面的示例代码中我们声明了一个Study接口和两个方法,它们分别是readBooks()和doHomework()。

interface Study {
    fun readBooks()
    fun doHomework()
}

接下来我们尝试让Student类继承Person类并实现Study接口,需要注意的是这里的Student类代码与之前的内容并不相同。

                                     继承父类             实现接口
class Student(name: String, age: Int): Person(name, age), Study {
    override fun readBooks() {
        println(name + "is reading.")
    }
    override fun doHomework() {
        println(name + "is doing homework.")
    }
}

在上面的代码中,Student作为子类继承自Person父类,并且实现了Study接口。在Java语言中继承的关键字是extends,而实现接口的关键字是implements。而在Kotlin语言中,类的继承和接口的实现都用冒号:表示,多个接口的实现则用逗号进行分隔
例如A类继承了B类并实现了C接口:

class A : B(), C {  
    // ...  
}

再例如A类继承了B类并实现了C接口和D接口:

class A : B(), C, D {  
    // ...  
}

某个类一旦实现了一个接口,就需要对该接口中的方法进行实现。在Kotlin语言中使用override关键字重写父类或者实现接口中的方法。

1.2 面向接口编程(多态)

以下代码用于演示接口的多态性:

fun main(){
    val student = Student("Mike", 18)
    //因为Student类实现了Study接口 所以Student类的对象也可以作为参数传递给doStudy()方法
    doStudy(student)
}

//doStudy()方法要求接收一个Study类型参数
fun doStudy(study: Study){
    study.readBooks()
    study.doHomework()
}

//运行结果
——> Mike is reading.
——> Mike is doing homework.

其实Student的实例可以直接调用readBooks()和doHomework()的,不过为了演示多态而故意写复杂了一些。

fun main(){
    val student = Student("Mike", 18)
    student.readBooks()
    student.doHomework()
}

//运行结果
——> Mike is reading.
——> Mike is doing homework.

1.3 接口的默认实现函数

Kotlin为了让接口的使用更加灵活,额外增加一个功能:允许对接口中定义的函数进行默认实现。在下面的代码中我们给Study接口中的doHomework()方法增加了一个方法体,它的功能是打印一句话。如果接口中的一个方法拥有了方法体,那么这个方法体中的内容就是这个方法的默认实现。

interface Study {
    fun readBooks()
    
    //默认实现
    fun doHomework() {
        println("do homework default implementation.")
    }
}

当一个类去实现Study接口时,只会强制要求其实现readBooks()方法,而对doHomework()方法则没有要求,你可以选择实现或者不实现该方法。之所以会这样,是因为我们在Study接口中已经为doHomework()方法添加了方法体。当在实现接口的时候,如果你不实现doHomework()方法,则会使用该方法默认的实现逻辑。反之,如果你重新实现了该方法,则不会使用该方法默认的实现逻辑。

1.4 Kotlin语言中的修饰符

Kotlin语言的修饰符和Java还是存在些许差异,下面是它们的区别:
【4】Kotlin基础——接口的多种使用_第1张图片

你可能感兴趣的:(奇妙的Kotlin之旅,kotlin,开发语言,android)