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
相关产品推荐
相关产品推荐

