参考链接

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学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口相关推荐

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

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

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

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

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

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

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

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

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

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

  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 ...

最新文章

  1. Win7旗舰版安装Oracle_11gR1_database
  2. 【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
  3. 《分布式操作系统》知识点(15~21)三
  4. mybatis 动态 SQL
  5. 用PowerDesigner工具条不见的
  6. transform你不知道的那些事
  7. 使用调试器进行事后跟踪
  8. ACM所有算法大全(持续更新)
  9. d3代码如何改造成update结构(恰当处理enter和exit)
  10. 跟着石头哥哥学cocos2d-x(四)--cocos2dx中的动画以及TexturePacker使用
  11. 经典面试题 | 讲一下垃圾回收器都有哪些?
  12. ssh整合出现的错误
  13. Android 8.0学习(8)---内核文件系统优化
  14. servlet实现新闻控制
  15. 怎么把手机字体改成繁体_如何把手机字体变成繁体 繁体字转换器
  16. Touch Bar 和歌词的组合就很养眼不是吗?如何在 Touch Bar 上显示歌词?
  17. 兄弟单词C语言,brother是什么意思
  18. 经历三家千人互联网公司,总结出25条职场黄金法则
  19. 解决 Jupyter notebook 运行SHELL 命令(!xxx), 出错: OSError: “/bin/bach“ shell not found
  20. Flink开发利器StreamX

热门文章

  1. 中移物联网答案java_【分享】中移物联网校园招聘笔试-java
  2. getchwd() 函数返回当前工作目录。
  3. vue-cli构建的项目手动添加eslint配置
  4. 2-30hashlib模块讲解
  5. 在 2017 年将会更加流行的 6 个 Web 开发趋势
  6. [转载]使用CPU时间戳进行高精度计时
  7. 可怕的春运,烦人的火车票!
  8. Java多态性练习——几何图形
  9. 暴力枚举——回文质数(洛谷 P1217)
  10. Java-static-静态方法/全局方法