Koltin之类的定义

2019-12-20  本文已影响0人  钦_79f7

类的定义

接口 interface

类似 Java8 接口中的方法可以有默认实现,但是不需要 default 关键字来标识,以是否有方法体的存在来区分

一个类实现多个接口时,若有相同方法在不同的接口中有默认实现,那么在实现类中要明确重写这个方法

//调用接口的默认逻辑,通过<>来指定
super<AInterface>.sum()
super<BInterface>.sum()

Kotlin1.0 是以Java6 为目标设计的,其并不支持接口中的默认方法。因此它会把每个带默认方法的接口编译成一个普通接口和一个将方法方法体作为静态函数的类的结合体。接口中只包含声明,类中包含了以静态方法存在的所有实现。因此,如果需要在Java类中实现这样一个接口,必须为所有的方法,包括在kotlin中有方法体的方法定义你自己的实现。

继承性修饰符 open、final、abstract

因Java中存在脆弱的基类问题,kotlin中类的声明默认是 final的,即不可被继承的。

接口中的方法(包括抽象方法,以及默认实现的方法),默认都是 open 的。被 override 修饰的方法也默认是 open的。当然 override 的方法可以显示的声明为final 的,禁止被重写。

可见性修饰符

通用规则:类的基础类型和类型参数列表中用到的所有类,或者函数的签名都有与这个类或者函数本身相同的可见性

类的扩展函数不能访问它的private 与 protected 成员

kotlin 编译成字节码后与Java的对应关系:public -> public;internal -> public;protected -> protected;private -> private

所以存在这个现象:当一个类声明为internal 或者 protected ,在kotlin中不可访问的地方,当转换为Java时,某些kotlin不可用的场景在Java中确实可见可访问的。

嵌套类 内部类

默认是 嵌套类,对应Java的静态内部类,即不持有外部类的引用。

密封类 sealed

委托类 by

关键字 object

Kotlin 中 object 在多种情况下都出现,但是他们都遵循一个核心的理念:
object定义一个类并同时创建一个实例

上一篇 下一篇

猜你喜欢

热点阅读