构造函数

一个类可以有一个主构造函数和多个次构造函数

主构造函数

  1. 跟在类名之后,使用constructor关键字,也可以省略
  2. 初始化代码放置在init关键字的代码体中
  3. 初始化块中的代码实际上会成为主构造函数的一部分,委托给主构造函数会作为次构造函数的第一条语句,因此所有初始化块中的代码都会在次构造函数体之前执行

    次构造函数

  4. 必须使用constructor关键字

  5. 必须调用主构造函数
  1. class Point(val x: Int, val y: Int) {
  2. constructor(base: Int) : this(base + 1, base + 1) {
  3. println("constructor(base: Int)")
  4. }
  5. constructor(base: Long) : this(base.toInt()) {
  6. println("constructor(base: Long)")
  7. }
  8. }

数据类

  1. 主构造函数中必须包含至少一个参数
  2. 所有的构造参数都必须指定val或者var
  3. data类是public final的,不能被继承

密封类

Sealed 类(密封类)用于对类可能创建的子类进行限制,用 Sealed 修饰的类的直接子类只允许被定义在 Sealed 类所在的文件中(密封类的间接继承者可以定义在其他文件中),这有助于帮助开发者掌握父类与子类之间的变动关系,避免由于代码更迭导致的潜在 bug,且密封类的构造函数只能是 private 的

  1. sealed class View {
  2. fun click() {
  3. }
  4. }
  5. class Button : View() {
  6. }