定义变量和方法
Kotlin中的接口是可以定义变量和方法体,但变量不可以初始化,也就是不能有状态,只能有定义(Java
中的变量可以被初始化),在被继承时必须初始化接口变量,赋予状态,而方法表示的是实现过程,本身就没
有状态(Java8开始,也支持定义static和default类型的方法,这些方法是可以有方法体的)。
为什么接口中的变量不能被初始化?
因为接口中的变量没有backing field,也就无法存储变量,所以只能做为一种声明;
backing field(类中定义的变量自带,用来存储变量内容,可以理解为堆栈) + get、set 方法 等价于
Kotlin类中的属性Property,这也是Kotlin中独有的;
在Kotlin中只需声明一个变量,就相当于属性,backing field + get、set 方法由Kotlin自动生成;
在Java中,这些都必须自己手动声明;
解决多接口方法冲突
当一个类继承了多个接口,这些接口出现了两个完全一致的方法声明,必须通过super进行显式指定调用方;
1 | interface n1{ |
SAM接口
SAM接口又称为函数式接口(Single Abstract Method interfaces),这种接口可以简单的理解为:只有
一个抽象方法的接口,这种接口可以通过lambda实现简化,在Java8和Kotlin中都有应用到。
比如View的OnclickListener接口就是一个典型的SAM接口,Kotlin中的函数类型也可以理解为SAM接口
的另一种形式(Kotlin不需要定义SAM接口,有函数类型就够了,对SAM接口的简化只是为了兼容Java)。