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来初始化nameage属性

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。