Kotlin接口与SAM函数,以及可见性修饰符
2021-03-29 本文已影响0人
漆先生
一、Kotlin接口
Kotlin 的接口可以既包含抽象⽅法的声明也包含实现。与抽象类不同的是,接口⽆法保存状态。它可以有属性但必须声明为抽象或提供访问器实现。
1.实现接口
⼀个类或者对象可以实现⼀个或多个接口。
2.接口中的属性
接口中声明的属性要么是抽象的,要么提供访问器的实现。在接口中声明的属性不能有幕后字段(backing field)
3.接口继承
⼀个接口可以从其他接口派生,从而既提供基类型成员的实现也声明新的函数与属性。基类没有方法体时默认为抽象,派生类一定要实现。
4.解决覆盖冲突
采用super<基类>.method()的方式。选择性使用基类方法
二、函数式(SAM)接口
只有⼀个抽象方法的接口称为函数式接口或 SAM(单⼀抽象⽅法)接口。函数式接口可以有多个非抽象成员,但只能有⼀个抽象成员。
1.SAM 转换
函数式接口通过 lambda 表达式实现 SAM 转换
interface IntPredicate {
fun accept(i: Int): Boolean
}
//不使用转换
val isEven = object : IntPredicate {
override fun accept(i: Int): Boolean {
return i % 2 == 0
}
}
//SAM转换(但是编译器报错,后面有待再次验证)
val isEven = IntPredicate { it % 2 == 0 }
2.函数式接⼝与类型别名比较
- 类型别名只是现有类型的名称它们不会创建新的类型,而函数式接口却会创建新类型。
- 类型别名只能有⼀个成员,而函数式接口可以有多个非抽象成员以及⼀个抽象成员。函数式接口还可以实现以及继承其他接口。
三、可见性修饰符
这四个可可性修饰符:private 、protected 、internal 和 public 。
如果没有显式指定修饰符的话,默认可见性是 public 。internal 是相同模块可见,其它同java