kotlin-类构造函数

Kotlin 使用关键字 class 来定义类
类的修饰包括类名,类头部(指定类型参数和主构造函数等),花括号包裹的类体。
类头和体是可选的,没有体的时候,花括号可以忽略

class Invoice {
}

// 这个有什么用处呢?
class Empty

构造函数

一个类可以有一个主构造函数和 1-n 个二级构造函数,
主构造函数是类头的一部分,在类名的后面,有可选的类型参数

class Person constructor(firstName: String) {
}

如果主构造函数没有任何注解和可见修饰符 constructor 关键字可以省略

class Person(firstName: String) {
}

主构造函数不能包含任何代码,初始化代码可以放在 使用 init 关键字声明的 initializer blocks
在实例初始化的时候,按照在类体出现的顺序执行

class InitOrderDemo(name: String) {
val firstProperty = "First property: $name".also(::println)

init {
println("First initializer block that prints ${name}")
}

val secondProperty = "Second property: ${name.length}".also(::println)

init {
println("Second initializer block that prints ${name.length}")
}
}

常用的简洁的声明方式

class Person(val firstName: String, val lastName: String, var age: Int) {
// ...
}

二级构造函数

使用关键字 constructor 定义

class Person {
constructor(parent: Person) {
parent.children.add(this)
}
}