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()
}
二,测试效果:

浙公网安备 33010602011771号