接口是用于实现
多态编程
的的重要组成部分。任何一个类只能继承一个
父类
,但可以实现任意
接口
。就像一个孩子只能有一个父亲,但他可以有很多技能。
我们继续用之前的
Human
和
Student
。我们这里来给
Student
创建
Study
接口,让学生学习起来。新建一个名为
Study
的
interface
。

我们可以在
接口函数
中定义很多
抽象行为
,然后再具体
类
中实现。下面我们定义两个学习行为:
interface Study {fun learnMath()fun learnEnglish()}
有了行为,我们回到
Student.kt
里,为了便于学习接口,更改代码如下:
package com.example.hellowordclass Student(name: String, age: Number): Human(name,age), Study{override fun learnEnglish() {println(name + \"is learning English.\")}override fun learnMath() {println(name + \"is learning Math.\")}}
同时给出
Human.kt
的代码,以防出错:
package com.example.hellowordopen class Human(val name: String,val age: Number) {}
- Kotlin接口统一使用
: 冒号,而有继承也需要用到 : 时,用 , 隔开即可。 
- 
接口 后面没有括号,因为没有 构造函数 。 
- Kotlin中使用
override 来重写 父类 或实现 接口函数 。这是被强制要求的 修饰符 。 
- 
Study 结构定义了两个函数, Student 类里必须实现这两个函数。 
下面我们在
Student.kt
里执行以下
main
函数:
fun main(){val xiaoming = Student(\"Xiao Ming\", 22)xiaoming.learnEnglish()xiaoming.learnMath()}
我们实例化
Student
类为
xioaming
。并执行了两个接口函数。结果如下:
我们继续修改
Student.kt
里的代码:
fun tuDo(study:Study){study.learnMath()study.learnEnglish()}fun main(){val xiaoming = Student(\"Xiao Ming\", 22)tuDo(xiaoming)}
此段代码为解释
面向接口编程
,也称
多态
。
- 
原本我们可直接调用 xiaoming 来实现两个动作,而这里定义一个 tuDo() 函数。 
- 
tuDo() 函数可接收一个类型为 Study 的参数,因此我们定义的 xiaoming 实例可以传入 TuDor() 函数。 
- 
在 tuDo() 内我们调用了两个函数。实现效果和上面相同。 
大家可能还有个疑问:接口函数里什么也没写,没用啊!当然可以写啦,看下面代码:
interface Study {fun learnMath()fun learnEnglish(){println(\"Do English homework.\")}}
我们定义了
learnEnglish()
的具体动作。这样此函数就有函数体了。有函数体后,函数是默认可用的,不需要去
override
重写的,而你如果重写了,就按你重写的执行了啦。
如果你预先定义的没有函数体,则是必须要
override
重写的哦。
我们将下段代码删除:
override fun learnEnglish() {println(name + \"is learning English.\")}
仍然运行
main
,得到结果:
好啦,我们事先写好的语句出现。有了接口,我们可以少定义很多重复的函数。
可是,我们有的时候只希望一个函数运行在限定的空间内,这就要用到
函数可见性修饰符
。
修饰符有以下四种:
| 修饰符 | 权限 | 
|---|---|
| public | 所有类可见(默认) | 
| private | 当前类可见 | 
| protected | 当前类、子类可见 | 
| internal | 同一模块中的类可见 | 
以上的详细运用,大家在平时实践中即可掌握。
欢迎关注小试编程

 爱站程序员基地
爱站程序员基地


