Kotlin 学习笔记(八)—— Kotlin类与对象之接口


Kotlin学习笔记系列教程

Kotlin 学习笔记(一)—— 概述、学习曲线、开发工具、参考资料
Kotlin 学习笔记(二)—— 基础语法
Kotlin 学习笔记(三)—— 习惯用法
Kotlin 学习笔记(四)—— Kotlin基础之基本类型
Kotlin 学习笔记(五)—— Kotlin基础之控制流、返回与跳转、 包与导入
Kotlin 学习笔记(六)—— Kotlin类与对象之类和继承
Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段


接口

Kotlin 的接口和 Java8 类似,既包含抽象方法的声明,也包含实现。与抽象类不同的是,接口无法保存柱状。它可以有属性但必须声明为抽象或提供访问器实现。

使用关键字 interface 来定义接口

    interface A {fun setName()fun setAge(){//可选方法体}}
复制代码

实现接口

一个类或者对象可以实现一个或多个接口。

class B : A {override fun setName() {}
}
复制代码

接口中的属性

你可以在接口中定义属性。在接口中声明的属性要么是抽象的,要么提供访问器的实现,在接口中声明的属性不能有幕后字段,因此接口中声明的访问器不能引用它们。

interface A {val time:Intvar name:Stringget() = "aaa"set(value) {}fun setName()fun setAge(){//可选方法体}
}class B : A {override val time: Intget() = 5override fun setName() {}
}
复制代码

解决覆盖冲突

实现多个接口或继承父类时,可能会遇到同一方法继承多个实现的问题:

interface A {fun foo() { print("A") }fun bar()
}interface B {fun foo() { print("B") }fun bar() { print("bar") }
}class C : A {override fun bar() { print("bar") }
}class D : A, B {override fun foo() {super<A>.foo()super<B>.foo()}override fun bar() {super<B>.bar()}
}
复制代码

接口 A 和 B 都定义了方法 foo() 和 bar(),两者都实现了foo(),但是只要 B 实现了bar(),bar()在 A 中没有标记为抽象,因为没有方法体时默认为抽象。因为 C 实现了 A 的具体类,所以必须重写 bar() 并实现这个抽象方法。

然而,如果我们从 A 和 B 派生 D,我们需要实现我们从多个接口继承的所有方法,并指明 D 应该如何实现它们。这一规则既适用于继承单个实现(bar())的方法也适用于继承多个实现(foo())的方法。


以上就是类与对象第三篇之接口,第四篇将学习可见性修饰符


个人博客地址:http://outofmemory.top/
CSDN地址:http://blog.csdn.net/dazhaoDai
GitHub地址:https://github.com/dazhaoDai


Kotlin 学习笔记(八)—— Kotlin类与对象之接口相关推荐

  1. Kotlin学习之路(4)——类,对象和接口

    类,对象和接口 之前的篇章已经简单的介绍过如何声明一个类,也知道了一些简单的主构造方法来声明方法和属性,以及使用枚举类. 类和接口 接口 和Java相同的是,我们同样用interface来定义一个接口 ...

  2. Kotlin学习笔记 第二章 类与对象 第十四 十五节 委托 委托属性

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  3. Kotlin学习笔记 第二章 类与对象 第一节类与继承(补)

    参考链接 Kotlin官方文档 Kotlin docs | Kotlin 本系列为参考Kotlin中文文档 kotlin官方文档2020版.pdf-其它文档类资源-CSDN下载 第二章 第一节 类与继 ...

  4. Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  5. Kotlin学习笔记 第二章 类与对象 第五节 可见性 第六节 扩展

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  6. Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  7. Kotlin学习笔记 第二章 类与对象 第十节 内部类嵌套类

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  8. Kotlin学习笔记 第二章 类与对象 第七节 数据类

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  9. Kotlin学习笔记 第二章 类与对象 第十一节 枚举类 第八节密封类

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  10. Kotlin学习笔记 第二章 类与对象 第二节属性

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

最新文章

  1. Angular1.x的自定义指令directive参数配置详细说明
  2. [MySQL FAQ]系列 -- mysqldump出错一例:打开文件数太多
  3. 利物浦大学图书馆官网西交利物浦大学图书馆官网
  4. BZOJ5212 ZJOI2018历史(LCT)
  5. java开发微信二维码
  6. AndroidX 方法数限制 Error:Cannot fit requested classes in a single dex file 64K问题
  7. django中使用原生sql
  8. python自由落体_VPython - example - 模拟自由落体运动
  9. 信号的采样与恢复matlab实验报告,实验七 连续信号的采样与恢复
  10. m_Orchestrate learning system---二十二、html代码如何变的容易
  11. Python精通-Python列表操作
  12. 进出仓原理_通达信浪口主图+窥窃天机副图+进出仓副图强强组合
  13. i7 8750h支持linux,i7 8750H好吗i7 8700和8750H性能差别大吗?
  14. .NET之EntityFramework框架运用
  15. 初恋 张润贞 吉他谱
  16. Web Server的启动过程
  17. APP版本号命名规范及原则,2018android面试题
  18. CSS居中对齐的方法
  19. 基于STM32F103单片机的车牌识别图像处理识别系统 原理图PCB程序设计
  20. 微信公众号jsapi支付

热门文章

  1. AngularJS第二课(指令,作用域,控制器)
  2. java.io与网络通信
  3. 近距离接触RAC DRM
  4. 基础拾遗(1):字符(串)数字互转
  5. Oracle PL/SQL编程之包(packages)
  6. 2014年工作中遇到的10个问题:221-230
  7. win7安装MongoDB学习笔记
  8. Java JSON、XML文件/字符串与Bean对象互转解析
  9. C++调用Lua编程环境搭建及测试代码示例
  10. 北电ERS1600,8300,8600交换机的基本技术-第六章 二层冗余技术(MLT,SMLT,IST)