在Kotlin中,构造函数(Constructor)是一个类似于方法的代码块。 声明构造函数的名称与类的名称相同,后跟括号()。 构造函数用于在创建对象时初始化变量。构造函数也叫构造器
Kotlin 中的构造器类型
在kotlin中构造函数分为主构造函数(Primary Constructor)和次构造函数(Secondary constructory)
主构造函数 Primary Constructor
主构造函数定义
主构造函数用于初始化类,它在类标题中声明,定义如下:
class Person constructor(var name: String, var age: Int) {
}
其中constructor可以省略
class Person (var name: String, var age: Int) {
}
在这里 constructor(var name: String, var age: Int)
或 (var name: String, var age: Int)
声明为类头的一部分,这是Persion类的主构造器,它初始化Persion类的 name与age属性。
初始化构造函数实例
下面我们创建一个实例,用"Alfres"与28来初始化name
与age
属性
class Person (var name: String, var age: Int) {
}
fun main(args:Array<String>){
val person = Person("Alfres",28)
println("name = ${person.name}, age = ${person.age}")
}
结果:
name = Alfres, age = 28
主构造函数的默认值
我们也可以像在 Kotlin 构造器中指定默认值。比如我们指定 name
为"张三",age
为50。
class Person(var name: String = "张三", var age: Int = 50) {
}
fun main(args: Array<String>) {
var person = Person()
println("name = ${person.name}, age = ${person.age}")
person = Person("Alfres", 28)
println("name = ${person.name}, age = ${person.age}")
}
结果:
name = 张三, age = 50
name = Alfres, age = 28
构造器中的初始化程序块
主构造函数不包含任何代码,初始化程序块用于初始化代码。 该块是以init
关键字为前缀, init{ }
中可以有额外的初始化逻辑。
class Person(var name: String = "张三", var age: Int = 50) {
init {
val mText = "name = $name age = $age"
if (age < 18) {
println("$mText 你是未成年")
}else{
println("$mText 你是成年人 ")
}
}
}
fun main(args: Array<String>) {
Person()
Person("Alfres", 8)
}
结果:
name = 张三 age = 50 你是成年人
name = Alfres age = 8 你是未成年
次构造函数
注意
:
- Kotlin在类中创建一个或多个次构造函数。
- 使用constructor关键字创建,且不可省略。
- 也可以在同一个类中使用主和次构造函数。
- 可以使用this关键字从另一个构造器调用构造器。
class Person(var name: String, var age: Int) {
var sex = "女"
var weight = 120
init {
//主构造函数初始化代码块
}
constructor(name: String, age: Int, sex: String) : this(name, age) {
//次构造函数初始化代码块
this.sex = sex
}
constructor(name: String, age: Int, sex: String, weight: Int) : this(name, age, sex) {
//次构造函数初始化代码块
this.weight = weight
}
}
fun main(args: Array<String>) {
var person1 = Person("张三", 23, "男")
println("name = ${person1.name}, age = ${person1.age}, sex = ${person1.sex}")
person1 = Person("张三", 23, "男", 160)
println("name = ${person1.name}, age = ${person1.age}, sex = ${person1.sex}, weight = ${person1.weight}")
}
结果:
name = 张三, age = 23, sex = 男
name = 张三, age = 23, sex = 男, weight = 160