一、类
- Kotlin中所有类的父类是 Any(Java中是Object),它默认提供三个函数:equals()、hashCode()、toString()。
- Kotlin中类以及成员属性和成员函数默认都是 final 修饰的,无法被继承和重写。
- 完整格式:class 类名 可见性修饰符 注解 constractor (参数列表){ }
属性 | Backing Field、getter/setter |
构造函数 | 主构造、次构造 |
继承 | open、override |
抽象类、接口 | abstract、interface |
内部类、嵌套类、局部类 | inner |
数据类 | data class、componentN()、copy() |
枚举类 | enum |
密封类/接口 | sealed |
companion object |
class Demo{ }
二、可见性修饰符
修饰符 | 类成员 | 顶层声明 | 对比Java |
public(默认) | 所有地方可见 | 所有地方可见 | public 所有地方可见 |
internal | 模块中可见 | 模块中可见 | default 包中可见 |
protected | 子类中可见 | X | protected 子类中可见 |
private | 本类中可见 | 该文件中可见 | private 本类中可见 |
三、类型别名 Type Aliases
就是另外取个名称,解决又臭又长的命名。可用于:类、泛型类、内部类、函数类型、泛型函数。格式:typealias 别名 = 类名,需要声明在顶层。
//又臭又长
class YouChouYouChang{ fun show() = println("Hello") }
//取别名
typealias AA = YouChouYouChang
val ycyc = YouChouYouChang()
val aa = AA()
ycyc.show() //打印:Hello
aa.show() //打印:Hello
//类型强转无必要
println(aa is YouChouYouChang) //打印:true
println(aa is AA) //打印:true
3.1 基本使用
3.1.1 泛型类
class Old<T, R>(param1: T, param2: R)
typealias New1 = Old<Int, String>
typealias New2<T> = Old<T, String>
val a = New1(3, "")
val b = New2("", "")
3.1.2 内部类
class Outter {
inner class Inner {}
}
typealias AA = Outter.Inner
val in1 = out.Inner()
val in2 = out.AA()
3.1.3 函数类型
fun old(function: (Int, String) -> Unit, num: Int, name: String) {}
typealias new = (Int, String) -> Unit
fun new(function: new, num: Int, name: String) {}
3.1.4 泛型函数
typealias new2<T, R> = (T, R) -> Unit
fun <T, R> new2(function: new2<T, R>, param1: T, param2: R) {}
3.2 嵌套类型别名(Nested Type Aliases)
kotlin v2.2.0 还处于测试阶段
声明在类、接口、对象中,默认 private 限制在内部使用(可显式声明为 internal、public 使其能在外部被访问),作用域隔离避免顶层命名污染,因此可将基本数据类型改成更有意义的名称,如 private typealias BookName = String。