Java父类子类继承关系中子类构造方法的正确写法是什么?
你的实现思路大致方向完全正确,给出的示例代码也可以正常编译运行,关于Java子类构造和父类成员访问的规范说明如下:
1. 子类构造方法的写法正确性
Java继承体系下,子类实例化时必须先完成父类的初始化逻辑,规则如下:
- 如果父类只定义了有参构造方法(如你示例中的类A没有无参构造),子类构造方法的第一行必须显式调用
super(对应参数)匹配父类的有参构造,你写的B、C类构造第一行调用super(num1, num2)的写法完全符合规范,就是正确的父类属性初始化操作。 - 如果父类存在无参构造,你不写
super()的话编译器会自动在子类构造第一行补全无参的super()调用,不会报错。
2. 父类属性访问的逻辑正确性
你提到的「初始化父类后通过get/set方法、super.方法名调用父类属性和方法」的逻辑是完全正确的:
- 你示例中父类A的
num1、num2是private修饰的私有属性,子类不管是B还是C都不能直接访问这两个属性,必须在父类A中定义对应的公开getter、setter方法,子类才能通过调用这些方法操作父类的私有属性,符合Java封装的规范要求。 - 如果父类的属性/方法用
protected或者public修饰,子类可以直接通过super.属性名/方法名直接访问,不需要额外调用get/set,但工业级开发中通常会把类属性设为私有,通过get/set对外暴露操作入口,你的思路是符合最佳实践的。
注意事项
super()调用必须放在子类构造方法的第一行,放在其他位置会直接编译报错,你当前的写法符合要求。- 如果要在子类中重写父类的方法,调用父类的原有实现也需要用
super.方法名(参数)的写法。
内容的提问来源于stack exchange,提问作者braiden-cu
相关产品推荐
相关产品推荐

