Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口
参考链接
Kotlin官方文档
https://kotlinlang.org/docs/home.html
中文网站
https://www.kotlincn.net/docs/reference/properties.html
本系列为参考Kotlin中文文档
https://download.csdn.net/download/u011109881/21418027
整理的笔记 不记得原pdf下载地址了
第二章 第三节 接口
主要知识点
1 如何定义接口
2 如何实现接口
3 接口中的属性
4 接口继承接口
5 解决接口上的覆盖冲突
笔记
package com.example.lib.d03classobjectfun main() {// 测试接口的覆盖val myChild = D0303Interface.Child()println(myChild.prop)println(myChild.propertyWithImplementation)
}class D0303Interface {// 2 如何实现接口class Child : MyInterface {// 覆盖接口中的prop值override val prop: Int = 1// 覆盖接口中的propertyWithImplementation值// 如果不覆盖 则其值为foooverride val propertyWithImplementation: String = "child string"// 该方法必须实现 因为MyInterface没有具体实现override fun bar() {// ⽅法体}// 该方法可以不覆盖 因为接口已经有实现override fun foo() {super.foo()}}}// 1 如何定义接口
interface MyInterface {// 3 接口中的属性// 你可以在接⼝中定义属性。在接⼝中声明的属性要么是抽象的,要么提供访问器的实现。在接⼝中声明的属性不// 能有幕后字段(backing Meld),因此接⼝中声明的访问器不能引⽤它们val prop: Int // 抽象属性 没有具体赋值 子类必须实现该属性(给他具体初始值)val propertyWithImplementation: String // 非抽象属性 默认值为fooget() = "foo"fun bar()fun foo() {// 可选的⽅法体// 与Java不同的是 Kotlin的接口可以有具体的实现println("foo")}
}// 4 接口继承接口
// 一个接⼝可以从其他接⼝派⽣,从⽽既提供基类型成员的实现也声明新的函数与属性。很⾃然地,实现这样接⼝
// 的类只需定义所缺少的实现
interface Named {val name: String
}interface Person : Named {//接口Person继承接口Namedval firstName: Stringval lastName: String// 实现继承自Named的属性的get方法 返回firstName+lastNameoverride val name: String get() = "$firstName $lastName"
}// 数据类继承自Person 因为Person内部已经override了name 所以Employee不一定需要重写name属性
// 关于data class 后面再讲
data class Employee(// 不必实现“name”override val firstName: String,override val lastName: String,
) : Person// 5 解决接口上的覆盖冲突
// 实现多个接⼝时,可能会遇到同⼀⽅法继承多个实现的问题
interface A {fun foo() {print("fooA")}fun bar()// 默认是抽象方法
}interface B {fun foo() {print("fooB")}fun bar() {print("barB")}
}class C : A {// 抽象方法必须重写override fun bar() {print("barC")}
}class D : A, B {// 这里的继承规则在类与对象-类与继承第16点 中也讲过// 不管是继承接口 还是继承类 调用父类/父接口的方式不变override fun foo() {super<A>.foo()super<B>.foo()}override fun bar() {super<B>.bar()}
}
第二章 第四节 函数式接口
主要知识点
1 什么是函数式(SAM)接⼝
2 函数式接口的应用
笔记
package com.example.lib.d03classobjectfun main() {// 2 函数式接口的应用2// 测试使用SAM函数println("res = ${res1.add(2, 9)}")
}class D0304SamInterface {}// 1 函数式(SAM)接⼝
// 只有⼀个抽象⽅法的接⼝称为函数式接⼝或 SAM(Single Abstract Method 单⼀抽象⽅法)接⼝。函数式接⼝可以有多个⾮抽象成员,但
// 只能有⼀个抽象成员。
// 可以⽤ fun 修饰符在 Kotlin 中声明⼀个函数式接⼝。
// 函数式接口 VS 普通接口
// 在interface关键字前+fun 并且接口只有一个方法
// 那么这个接口就是 函数式(SAM)接⼝
fun interface KRunnable {fun invoke()// 如果添加这一句话会报错// Fun interfaces must have exactly one abstract method// 函数式接口只能有一个抽象方法// fun invoke2()
}// 2 函数式接口的应用1:SAM 转换
// SAM 转换 即使⽤ lambda 表达式替代创建实现函数式接⼝的类
// 例如有一个函数式接口
fun interface IntPredicate {fun add(i: Int, j: Int): Int
}// 不用SAM转换 即直接继承接口
val res = object : IntPredicate {override fun add(i: Int, j: Int): Int {return i + j}
}// 使用SAM转换
val res1 = IntPredicate { i, j -> i + j }
// 个人猜测 函数式接口只有一个抽象接口 那么可以 用接口名直接代表抽象方法 方法体内部就是lambda表达式的抽象接口的实现
Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口相关推荐
- Kotlin学习笔记 第二章 类与对象 第十一节 枚举类 第八节密封类
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第五节 可见性 第六节 扩展
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第十四 十五节 委托 委托属性
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第七节 数据类
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第一节类与继承(补)
参考链接 Kotlin官方文档 Kotlin docs | Kotlin 本系列为参考Kotlin中文文档 kotlin官方文档2020版.pdf-其它文档类资源-CSDN下载 第二章 第一节 类与继 ...
- Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第二节属性
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第九节 泛型
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- Kotlin学习笔记 第二章 类与对象 第十节 内部类嵌套类
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
最新文章
- Win7旗舰版安装Oracle_11gR1_database
- 【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
- 《分布式操作系统》知识点(15~21)三
- mybatis 动态 SQL
- 用PowerDesigner工具条不见的
- transform你不知道的那些事
- 使用调试器进行事后跟踪
- ACM所有算法大全(持续更新)
- d3代码如何改造成update结构(恰当处理enter和exit)
- 跟着石头哥哥学cocos2d-x(四)--cocos2dx中的动画以及TexturePacker使用
- 经典面试题 | 讲一下垃圾回收器都有哪些?
- ssh整合出现的错误
- Android 8.0学习(8)---内核文件系统优化
- servlet实现新闻控制
- 怎么把手机字体改成繁体_如何把手机字体变成繁体 繁体字转换器
- Touch Bar 和歌词的组合就很养眼不是吗?如何在 Touch Bar 上显示歌词?
- 兄弟单词C语言,brother是什么意思
- 经历三家千人互联网公司,总结出25条职场黄金法则
- 解决 Jupyter notebook 运行SHELL 命令(!xxx), 出错: OSError: “/bin/bach“ shell not found
- Flink开发利器StreamX