java构造函数
public class JavaPerson {
int age;
String name;
public JavaPerson(int age, String name) {
this.age = age;
this.name = name;
}
public JavaPerson(int age){
this(age,"person");
}
}
kotlin构造函数
在kotlin中有两种类型的构造函数:
- 主构造函数(主构造器)
- 次级构造函数(次级构造器)
在Kotlin类中只有一个主构造函数(主构造器),而辅助构造函数(次级构造器)可以是一个或者多个.
Kotlin主构造函数
主构造函数用于初始化类,它在类标题中声明
class 类名 constructor(参数1,参数2) {
}
主构造函数不包含任何代码,初始化程序块用于初始化代码
class Person constructor(name: String, age: Int) {
val name: String
val age: Int
init {
this.name = name
this.age = age
}
}
kotlin中通过constructor关键字标明构造函数,对于主构造函数来说,它的位置在类的标题中声明,而对于次级构造函数来说它的位置在类中.
当constructor关键字没有注解和可见性修饰符修饰时,上面的构造函数关键字可省略
class Person(name: String, age: Int) {
val name: String
val age: Int
init {
this.name = name
this.age = age
}
}
如果构造函数需要私有化时,此时constructor关键字则不可省略.
class Person private constructor(name: String, age: Int) {
val name: String
val age: Int
init {
this.name = name
this.age = age
}
}
而上面的代码在idea编辑中,一直存在黄色警告.
class Person private constructor(val name: String, val age: Int) {
}
当我们定义一个类并没有声明一个主构造函数的时候,kotlin会默认为我们生成一个无参的主构造函数.
kotlin 次级构造函数
kotlin在类中可以创建一个或者多个次级构造函数,并且使用constructor关键字创建次级构造函数
class Person {
private val name: String
private val age:Int
constructor(name:String,age:Int){
this.name=name
this.age=age
}
}
我们可以在同一类中使用主构造函数和次级构造函数.通过在一个类中使用主和次级构造函数,次级构造函数需要授权给主构造函数,也就是次级构造函数会直接或者间接调用主构造函数.
使用this()关键字对同一个类中的另一个构造函数进行授权.
class Person(name:String) {
constructor(name:String,age: Int):this(name){
}
}
在kotlin中还可以用一个次级构造函数调用同一个类的另一个次级构造函数.
class Person(name:String) {
constructor(name:String,age: Int):this(name){
}
constructor(name:String,age:Int,sex:String):this(name,age){
}
}
在kotlin中,子类的次级构造函数可以调用父类的次级构造函数,使用super关键字完成,属于继承.
open class Person(name: String) {
constructor(name: String, age: Int) : this(name) {
}
constructor(name: String, age: Int, sex: String) : this(name, age) {
}
}
class Man : Person {
constructor(name: String, age: Int) : super(name, age) {
}
constructor(name: String, age: Int, sex: String) : super(name, age, sex) {}
}