构造函数
主构造函数
- 跟在类名之后,使用constructor关键字,也可以省略
- 初始化代码放置在init关键字的代码体中
初始化块中的代码实际上会成为主构造函数的一部分,委托给主构造函数会作为次构造函数的第一条语句,因此所有初始化块中的代码都会在次构造函数体之前执行
次构造函数
必须使用constructor关键字
- 必须调用主构造函数
class Point(val x: Int, val y: Int) {constructor(base: Int) : this(base + 1, base + 1) {println("constructor(base: Int)")}constructor(base: Long) : this(base.toInt()) {println("constructor(base: Long)")}}
数据类
- 主构造函数中必须包含至少一个参数
- 所有的构造参数都必须指定val或者var
- data类是public final的,不能被继承
密封类
Sealed 类(密封类)用于对类可能创建的子类进行限制,用 Sealed 修饰的类的直接子类只允许被定义在 Sealed 类所在的文件中(密封类的间接继承者可以定义在其他文件中),这有助于帮助开发者掌握父类与子类之间的变动关系,避免由于代码更迭导致的潜在 bug,且密封类的构造函数只能是 private 的
sealed class View {fun click() {}}class Button : View() {}
