Kotlin(七) 接口

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

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

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

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

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

运行结果如图:

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

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

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

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

熟悉Java的人一定知道,Java中有publicprivateprotecteddefault(什么都不写)这4种函数可见性修饰符。Kotlin中也有4种,分别是publicprivateprotectedinternal,需要使用哪种修饰符时,直接定义在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 同一模块中的类可见
相关推荐
alexhilton13 小时前
Android车载OS中的Remote Compose
android·kotlin·android jetpack
落魄Android在线炒饭1 天前
Android 自定义HAL开发篇之 HIDL篇——从入门到实战(上)
android
plainGeekDev1 天前
广播接收器 → Flow + Lifecycle
android·java·kotlin
plainGeekDev1 天前
EventBus → SharedFlow
android·java·kotlin
37手游移动客户端团队2 天前
招聘-高级安卓开发工程师
android·客户端
用户41659673693552 天前
WebView 请求异常排查操作手册
android·前端
Kapaseker2 天前
学不动了,入门 Compose Styles API
android·kotlin
墨狂之逸才3 天前
Android TV WebView 遥控器按键处理:从全透传到白名单
android
plainGeekDev3 天前
MVC 写法 → MVVM
android·java·kotlin
恋猫de小郭3 天前
Flutter Patchwork,不用 Fork 改依赖包源码的第三方工具
android·前端·flutter