Kotlin(七) 接口

news2024/11/18 9:46:21

接口是用于实现多态编程的重要组成部分。我们都知道,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

同一模块中的类可见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1117533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1688店铺所有商品数据接口及店铺商品数据分析

获取1688店铺所有商品数据的接口是1688开放平台提供的接口,通过该接口可以获取店铺所有商品数据。 通过1688开放平台接口获取店铺所有商品数据的方法如下: 在开放平台注册成为开发者并创建一个应用,获取到所需的 App Key 和 App Secret 等信…

【公益案例展】联想集团青梅计划

‍ 联想集团公益案例 本项目案例由联想集团投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2023中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在全面实现社会主义现代化国家的目标下,中…

重要文件怎么加密?文件加密软件哪个好用?

当我们在使用电脑的过程中,我们需要使用到很多重要文件,为了保护文件的安全,我们需要进行加密保护。那么,重要文件该怎么加密呢?下面我们就一起来了解一下。 文件夹加密超级大师 文件夹加密超级大师是一款专业的电脑数…

一文了解线上展厅如何制作,线上展厅制作需要注意什么

引言: 随着数字化时代的来临,线上展厅已成为宣传营销的重要工具,让您能够展示产品、服务和品牌的独特之处。如何制作线上展厅,包括必须注意的因素成了很多人关注的重点。 一.制作线上展厅的步骤 1.确定展厅目标和内容…

Nacos 401 Client not connected

jar包在本地运行没有问题,但是把包放到linux上就运行不起来,报错如下(远程debug截的图) 后来看到文章-猜测可能和连接时间有关系 就是本地连接快,linux建立连接慢,采用上面文章的人工强制sleep建议&#…

基础gdb操作【Linux】

基础gdb操作【Linux】 一.gdb1.1 什么是gdb1.2 安装gdb1.3 如何进入gdb模式1.3.1 release/debug1.3.2 进入debug1.3.3 进入gdb调试模式 二.基础操作2.0 list 行号和 r2.0.1 list 行号2.0.1 r/run 2.1 断点操作2.1.0 打断点2.1.1 查看断点信息2.1.2 删除断点2.1.2 断点开关闭 2.…

Kibana开发工具安装

版本说明 名称版本备注kibana kibana-7.7.1-linux-x86_64.tar.gz 安装配置 tar -zxvf kibana-7.7.1-linux-x86_64.tar.gz -C /usr/local/ cd /usr/local/ mv kibana-7.7.1-linux-x86_64/ kibana-7.7.1/ #编辑配置文件,在末尾添加 vim /usr/local/kibana-7.7.1/con…

深入理解环境变量

前言 指令就是可执行程序,当我们运行自己的可执行程序时,需要用./来指定路径,可是为什么运行指令时不用指定路径呢?这就是环境变量的作用。 一.常见环境变量 环境变量是在程序运行期间需要用到的具有特定功能的一组变量&#x…

来看看如何使用CLOUDFARE_实现网络聚合_利用安全的网络协议实现网络通讯---工具箱工作笔记002

下面这个操作是需要进行安全网络下操作的 首先需要去访问https://1.1.1.1这样一个网站然后去下载对应的软件,安装上 首先进入这个网址 www.cloudflare.com 去点击注册 注册以后 然后登录,登录以后,然后左侧有个zero trust 然后再去写一个名字,团队的名字 然后选择也是免…

win11快速打开蓝牙设置的方法

win11快速打开蓝牙设置的方法 Windows 11 中快速连接蓝牙设备的 3 种方法!_哔哩哔哩_bilibili 如何为Windows设置快捷键?_百度知道 (baidu.com) Win11怎么隐藏文件夹?Win11通过命令隐藏文件夹的方法_windows11_Windows系列_操作系统_脚本之家 (jb51.net…

2020年江西省职业院校技能大赛软件测试技能竞赛方案(高职组)

2020年江西省职业院校技能大赛 软件测试技能竞赛方案(高职组) 各高等职业院校: 根据江西省教育厅《关于举办2020年江西省职业院校技能大赛的通知》(赣教职成字〔2020〕19号)文件精神,现举办2020年江西省职业…

【软考】11.1 生命周期/CMM/开发模型

《信息系统生命周期》 软件工程的基本要素:方法、工具、过程 五阶段生命周期的定义和输出 规划 ——> 分析 ——> 设计 ——> 实施 ——> 运行和维护系统分析阶段:逻辑设计 ——> 逻辑模型系统设计阶段:物理设计 ——> 物…

常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法

文章目录 🌟 如何优雅地写出高质量的Java代码🍊 设计模式🎉 单例模式🎉 工厂模式🎉 观察者模式 🍊 操作Redis🎉 连接Redis🎉 存储数据🎉 获取数据🎉 删除数据…

SpringBoot环境搭建与初创程序

一:IDEA环境准备 IDEA社区版版本: 2021.1-2022.1.4 IDEA专业版版本: 无要求 🌟如果个人电脑安装的IEDA不在这个范围,需要卸载重新安装;且⼀定要删除注册表 参考文章➜IDEA卸载和删除注册表 二: Maven (1)Maven的概念…

Java练习题-输出斐波那契(Fibonacci)数列

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又…

CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)

CSS3是用于为HTML文档添加样式和布局的最新版本的层叠样式表(Cascading Style Sheets)。下面是一些常用的CSS3属性及其详细解释: border-radius:设置元素的边框圆角的半径。可以使用四个值设置四个不同的圆角半径,也可…

自动化测试08

Junit 为什么学了Selenium还需学习Junit Selenium自动化测试框架;Junit单元测试框架。 拿着一个技术写自动化测试用例(Selenium3) 拿着一个技术管理已经编写好的测试用例(Junit5) Junit相关的技术 Junit是针对Java的一…

Cesium Vue(五)— 绘制多边形

1. 使用entity创建矩形 var rectangle viewer.entities.add({rectangle: {coordinates: Cesium.Rectangle.fromDegrees(// 西边的经度90,// 南边维度20,// 东边经度110,// 北边维度30),material: Cesium.Color.GREEN.withAlpha(0.8),},2. 使用primivite创建矩形 // primivite创…

【公众号开发】Access Token的获取 · 请求公众号服务器创建自定义菜单 · 处理自定义菜单按钮事件

【公众号开发】(3) 文章目录 【公众号开发】(3)1. 获取Access token1.1 确定参数1.2 补全URL(添加query string)1.3 测试 2. 封装AccessToken以便保存与后期使用2.1 TokenUtils做出一些调整2.2 单例模式的A…

YOLOv5改进实战 | 更换主干网络Backbone(三)之轻量化模型Shufflenetv2

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…