You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

确认Kotlin密封类无参时子类可省略继承声明的正确性

关于Kotlin密封类子类省略父类构造调用的疑问

我在Kotlin官方文档中未找到相关说明,或许是我有所遗漏。不过通过测试,我得出如下假设:当子类无需访问密封类的构造参数时,可以省略指定该子类的父类型为密封类。这在某种程度上违背直觉,但我能想到其适用场景,我的核心诉求是确认是否可以通过这种方式简化代码编写。

示例代码

object SealedClassesTest2 {

sealed class Class1 {
    data class SubClass1(val value: String) : Class1()
}

sealed class Class2 {
    data class SubClass2(val value: String)
}

sealed class Class3(val parentVal: String) {
    data class SubClass3(val value: String) : Class3("Class3")
}

sealed class Class4(val parentVal: String) {
    data class SubClass4(val value: String)
}

@JvmStatic
fun main(args: Array<String>) {
    val subClass1 = Class1.SubClass1("SubClass1")
    val subClass2 = Class2.SubClass2("SubClass2")
    val subClass3 = Class3.SubClass3("SubClass3")
    val subClass4 = Class4.SubClass4("SubClass4")
    println(subClass1.value)
    println(subClass2.value)
    println(subClass3.value)
    println(subClass3.parentVal)
    println(subClass4.value)
}

}

输出结果

SubClass1
SubClass2
SubClass3
Class3
SubClass4

测试中的行为差异

  • Class1和Class2的行为完全一致,即便SubClass2未调用Class2的构造函数,编译与运行均无报错。
  • Class3和Class4同样无编译与运行错误,但区别在于subClass3可以访问parentVal,而subClass4无法访问(因为未调用Class4的构造函数)。

我假设当父密封类无构造参数时,子类可省略调用其父类构造函数,且编译器不会区分二者差异。请问该假设是否正确?

内容的提问来源于stack exchange,提问作者Tim Korelov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:23:10