Kotlin 与 Java 的构造器有着很大的区别,Java 的构造器需要与类同名,Kotlin 的构造器则必须要使用 constructor
进行表示,并且没有 public
关键字修饰,因为 Kotlin 的构造器默认是公开可见的。
语言 | 构造器 | 默认修饰符 | 默认可见性 |
---|---|---|---|
Java | 与类同名的构造器 | 有 public 关键字修饰 | 默认可见 |
Kotlin | 用 constructor 声明 | 无 public 关键字修饰 | 默认可见 |
1 | /** |
1 | /** |
通过上面的代码我们知道了构造器在 Java 与 Kotlin 中的写法和区别。其实在 Kotlin 中,还有更简介的语法来写构造器,我们可以在声明类的同时声明构造器,语法格式是在类的后面使用括号包含构造器的参数列表,示例如下:
1 | class User constructor(username: String, password: String) { |
这种跟在类名后面的构造器称为「主构造器」,写在类中的构造器被称为「次构造器」。在 Kotlin 中,一个类最多只能有一个主构造器(也可以没有),而次构造器则没有个数限制。constructor 构造器移到类名后,类的属性可以引用构造器中的参数,比如以上示例中 User 类的属性 username 可以引用构造器中的 username 参数。此外,init
代码块也可以引用主构造器中的参数:
1 | class User constructor(username: String, password: String) { |
说明:其中 init 代码块是紧跟在主构造器之后执行的,这是因为主构造器本身没有代码体,init 代码块就充当了主构造器代码体的功能。
另外,如果一个类有主构造器,那么其他次构造器都要通过 this
关键字调用主构造器,可以直接调用或者通过别的次构造器间接调用。如果不调用 IDE 就会报错,比如下面这样:
1 | class User constructor(username: String, password: String) { |