Kotlin辅助构造函数和泛型
辅助构造函数
语法如下

// 1. 父类:必须标记为 open 才能被继承
open class SmartDevice(val name: String, val category: String) {
var deviceStatus = "Unknown"
init {
println("父类主构造函数:正在初始化 $name")
}
// 父类的辅助构造函数:处理带状态码的情况
constructor(name: String, category: String, statusCode: Int) : this(name, category) {//使用this
deviceStatus = if (statusCode == 1) "Online" else "Offline"
println("父类辅助构造函数:设置状态为 $deviceStatus")
}
}
// 2. 子类:继承父类
// 注意:子类的主构造函数 必须 调用父类的主构造函数
class SmartLight(
name: String,
val brightness: Int = 100 //*** 子类特有的属性 ***
) : SmartDevice(name, "Light") { // 这里固定了 category 为 "Light"
init {
println("子类主构造函数:亮度设为 $brightness")
}
// 子类的辅助构造函数:为了兼容旧逻辑或者特殊输入
// 它必须通过 this(...) 调用自己的主构造函数,进而间接调用父类主构造函数
constructor(name: String, brightness: Int, statusCode: Int) : this(name, brightness) {
this.deviceStatus = if (statusCode == 1) "Online" else "Offline"
println("子类辅助构造函数:处理状态码")
}
// 3. 伴生对象:地道的工厂模式
companion object {
fun createPurpleLight(name: String): SmartLight {
println("工厂方法:正在生产特殊的紫色灯...")
return SmartLight(name, 80)
}
}
}
// --- 测试运行 ---
fun main() {
println("--- 场景1:使用子类主构造函数 ---")
val light1 = SmartLight("客厅大灯", 90)
println("\n--- 场景2:使用子类辅助构造函数 ---")
val light2 = SmartLight("卧室小灯", 50, 0)
println("\n--- 场景3:使用工厂方法(推荐) ---")
val light3 = SmartLight.createPurpleLight("氛围灯")
}
//Code generated by ai because I can't find suitable e.g to analyse
emmm没有好用的思维导图软件,明天找
组成
SmartDevice 辅助构造: constractor(显式open)
+++++|++++++++++++++|++++++
子类
SmartLight 辅助构造:constructor(使用this间接调用,可以调用到原来的地方)
可以用来应对更复杂的逻辑,方便处理各种情况
说实话我不知道为什么要这样写,直接函数重载不好吗,为什么要省这一点代码让逻辑变得这么复杂

浙公网安备 33010602011771号