类
和java一样,用class关键字定义类。
class Gobj {
}
构造器
一个类有一个主构造器和一个或多个二级构造器。主构造器是类头的一部分,在类的名字后面。
class Student constructor(name: String) {
}
如果主构造器没有任何注解或可见标识符,constructor关键字可以忽略。
class Student(name: String) {
}
如果构造函数有注解或可见性声明,则 constructor 关键字是不可少的,并且可见标识符应该在constructor前面。
class Student public @inject constructor (name: String) {...}
主构造器不能包含任何代码,初始化代码可以放在初始化块中,初始化块需要用inti关键字。
class Student (name: String) {
init {
logger.info("Student initialized with value ${name}")
}
}
【注意】:主构造器的参数能够在初始化块中使用,他们也能在类的初始化属性声明时被使用。
class Student(name: String) {
val studentKey = name.toUpperCase()
}
事实上,为主构造器声明属性和初始化属性,kotlin有更简单的语法。
class Student(val name: String, var age: Int) {
// ...
}
像普通的属性,在主构造函数中的属性可以是可变或只读。
二级构造器
类也可以有二级构造器,需要加前缀 constructor:class Person {
constructor(parent: Person) {
parent.children.add(this)
}
}
如果类有主构造器,每个二级构造器都要直接或间接通过另一个二级构造器代理主构造函数。在同一个类中代理另一个构造函数使用 this 关键字:
class Person(val name: String) {
constructor (name: String, paret: Person) : this(name) {
parent.children.add(this)
}
}
如果一个非抽象类没有声明构造器(主构造器或二级构造器),它会产生一个没有参数的构造器。构造器是 public 。如果你不想你的类有公共的构造器,你就得声明一个空的主构造器:
class DontCreateMe private constructor () {
}
创建类的实例
我们可以像使用普通函数那样使用构造函数创建类实例:val gobj = Gobj()
val student = Student("张三")
注意 Kotlin 没有 new 关键字。