Kotlin(七) 接口

接口是用于实现多态编程的重要组成部分。我们都知道,Java是单继承结构的语言,任何一个类最多只能继承一个父类,但是却可以实现任意多个接口,Kotlin也是如此。

首先创建一个Study接口,在创建文件窗口选择"Interface"。

然后在Study接口中添加几个学习相关的函数,注意接口中的函数不要求有函数体,代码如下所示:

然后在Student类中,实现这个接口使用冒号,如果有继承父类,就使用逗号隔开就可以,如图:

实现接口后,会强制实现接口中的方法,我们在实现的方法中打印两句话,然后在main()函数中调用一下,如图:

运行结果如图:

这样我们就将Kotlin中接口的用法基本学完了,是不是很简单?不过为了让接口的功能更加灵活,Kotlin还增加了一个额外的功能:允许对接口中定义的函数进行默认实现。其实Java在JDK 1.8之后也开始支持这个功能了,因此总体来说,Kotlin和Java在接口方面的功能仍然是一模一样的。

下面我们学习一下如何对接口中的函数进行默认实现,修改Study接口中的代码,如下所示:

然后删除Student中的doHomework函数,发现也不会报错,然后我们运行main函数,如图:

现在你已经掌握了Kotlin面向对象编程中最主要的一些内容,接下来我们再学习一个和Java相比变化比较大的部分------函数的可见性修饰符。

熟悉Java的人一定知道,Java中有public、private、protected和default(什么都不写)这4种函数可见性修饰符。Kotlin中也有4种,分别是public、private、protected和internal,需要使用哪种修饰符时,直接定义在fun关键字的前面即可。下面我详细介绍一下Java和Kotlin中这些函数可见性修饰符的异同。

首先private修饰符在两种语言中的作用是一模一样的,都表示只对当前类内部可见。public修饰符的作用虽然也是一致的,表示对所有类都可见,但是在Kotlin中public修饰符是默认项,而在Java中default才是默认项。前面我们定义了那么多的函数,都没有加任何的修饰符,所以它们默认都是public的。protected关键字在Java中表示对当前类、子类和同一包路径下的类可见,在Kotlin中则表示只对当前类和子类可见。Kotlin抛弃了Java中的default可见性(同一包路径下的类可见),引入了一种新的可见性概念,只对同一模块中的类可见,使用的是internal修饰符。比如我们开发了一个模块给别人使用,但是有一些函数只允许在模块内部调用,不想暴露给外部,就可以将这些函数声明成internal。关于模块开发的内容,我们会在本书的最后一章学习。

表2.2更直观地对比了Java和Kotlin中函数可见性修饰符之间的区别。

表2.2 Java和Kotlin函数可见性修饰符对照表

修饰符 Java Kotlin
public 所有类可见 所有类可见(默认)
private 当前类可见 当前类可见
protected 当前类、子类、同一包路径下的类可见 当前类、子类可见
default 同一包路径下的类可见(默认) 无
internal 无 同一模块中的类可见
相关推荐
SomeOtherTime13 分钟前
Rust生命周期介绍(AI回答)
开发语言·后端·rust
程序猿打工仔23 分钟前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
喵本喵叁肆44 分钟前
Rényi 差分隐私:把隐私损失看成一族矩(英文原题:Rényi Differential Privacy (CSF 2017))
开发语言·r语言
普通人62 小时前
MySQL_FIND_IN_SET函数详解
android·数据库·mysql
Hvitur2 小时前
Java - Lambda
java·开发语言·python
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite
Evand J2 小时前
【MATLAB例程,PMSM19】永磁同步电机(PMSM)基于多速率无迹卡尔曼滤波(UKF)的转速与转子位置估计。测量缺失、状态预测与恢复性能分析
开发语言·matlab·电机·ekf·卡尔曼·电机滤波
喵了几个咪2 小时前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
开发语言·人工智能·后端·golang
꧁细听勿语情꧂3 小时前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫3 小时前
【C++——类和对象(上)】筑基篇:以封装奠定面向对象之基
c语言·开发语言·c++