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

     

 

posted on 2022-12-20 15:26  漫思  阅读(132)  评论(0编辑  收藏  举报

导航