类
在 Kotlin 中类用 class 时:
class Invoice {
}
类的声明包含类名,类头(指定类型参数,主构造函数等等),
以及类主体,用大括号包裹。类头和类体是可选的;如果没有类体可以省略大括号。
class Empty
构造函数
在 Kotlin 中类可以有一个主构造函数以及多个二级构造函数。
主构造函数是类头的一部分:跟在类名后面(可以有可选的类型参数)。
class Person constructor(firstName: String) {
}
如果主构造函数没有注解或可见性说明,则 constructor 关键字是可以省略:
class Person(firstName: String){
}
主构造函数不能包含任意代码。初始化代码可以放在以 init 做前缀的初始化块内
class Customer(name: String) {
init {
logger,info("Customer initialized with value ${
name}")
}
}
注意主构造函数的参数可以用在初始化块内,也可以用在类的属性初始化声明处:
class Customer(name: String) {
val customerKry = name.toUpperCase()
}
事实上,声明属性并在主构造函数中初始化,在 Kotlin 中有更简单的语法:
class Person(val firstName: String, val lastName: String, var age: Int) {
}
就像普通的属性,在主构造函数中的属性可以是可变的(var)或只读的(val)。
如果构造函数有注解或可见性声明,则 constructor 关键字是不可少的,并且可见性应该在前:
class Customer public @inject constructor (name: String) {
...}
二级构造函数
类也可以有二级构造函数,需要加前缀 constructor:
class Person {
constructor(parent: Person) {
parent.children.add(this)
}
}
如果类有主构造函数,每个二级构造函数都要,或直接或间接通过另一个二级构造函数代理主构造函数.
在同一个类中代理另一个构造函数使用 this 关键字:
class Person(val name