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

Kotlin主构造函数调用Java父类构造函数的写法是否正确?

结论

你写的Kotlin代码完全符合语法规范,可以正常实现通过主构造调用Java父类构造函数的需求,是Kotlin继承场景下的标准写法之一。

具体说明
  • Kotlin语法规定:如果子类声明了主构造函数,必须在类声明的头部,直接在父类名后传入构造参数完成父类初始化,你写的: DemoSuper(a, b) 逻辑,等价于Java中在子类构造方法第一行调用super(a, b)的效果,这个逻辑对Java定义的父类、Kotlin定义的父类完全通用,不存在跨语言兼容问题。
  • 你当前代码里private val a: Int、private val b: Int的声明,会让DemoClass自身持有两个独立的私有整型属性,和父类DemoSuper里的私有a、b字段不会产生命名冲突——父类的私有字段对子类本来就不可见,你传入参数只是完成父类构造阶段的私有字段赋值,子类自己的属性是完全独立的。
  • 如果你不需要在DemoClass内部访问这两个参数,只是要把参数透传给父类构造,可以省略val修饰符进一步精简代码:
// 子类自身不持有a、b属性,仅做参数透传
class DemoClass(a: Int, b: Int) : DemoSuper(a, b)
  • 只有当子类不声明主构造函数时,才需要在二级构造函数中通过super关键字显式调用父类构造,示例写法如下:
class DemoClass : DemoSuper {
    // 无主构造时,二级构造直接委托调用父类构造
    constructor(a: Int, b: Int) : super(a, b)
}

内容的提问来源于stack exchange,提问作者Hello Mr Mustafo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:27:17