kotlin: 构造函数的四种使用情况

一,代码:

类:

package com.example.okdemo1.model

//方式一:使用var、val自动声明初始化
class Demo1(var id: Int, var name: String) {
    //实在需要也可以再写init{}代码块做一些逻辑
    init{
        println("$id 、 $name")
    }

    fun show() {
        println("id:$id 、 name:$name")
    }
}

//方式二:使用init{}代码块手动声明初始化
//id、name只能在构造和成员属性中调用,可以声明同名成员属性,无法在成员函数中调用
class Demo2(id: Int, name: String) {
    var id:Int? = null
    var name = name   //初始化name
    init {
        this.id = id   //初始化id
    }

    fun show() {
        println("id:$id 、 name:$name")
    }
}

// 未声明主构造的情况 写法和Java类似。
// 次构造不能委托给主构造,因为没有主构造
class Demo3 {
    var id: Long? = null
    var name: String? = null
    var age: Int? = null

    constructor(){}
    constructor(id: Long) {
        this.id = id
    }
    constructor(id: Long,name: String) {
        this.name = name
        this.id = id
    }

    fun show() {
        println("id:$id 、 name:$name")
    }
}

//声明空参主构造的情况
class Demo4() {
    var id: Long? = null
    var name: String? = null

    constructor(id: Long) : this() {
        this.id = id
    }
    constructor( id: Long,name: String) : this(id) {
        this.name = name
    }
    fun show() {
        println("id:$id 、 name:$name")
    }
}

activity中调用:

        binding.btnIncrement.setOnClickListener {
            //viewModel.increment()
            val demo1 = Demo1(1,"老王")
            demo1.show()
            val demo2 = Demo1(2,"富贵")
            demo2.show()
            val demo3 = Demo3(3,"牛三")
            demo3.show()
            val demo4 = Demo4(4,"二肥")
            demo4.show()
        }

二,测试效果:

 

posted @ 2025-06-22 12:50  刘宏缔的架构森林  阅读(26)  评论(0)    收藏  举报