7.3 Kotlin构造函数
在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
漫思