JAVA子类的无参构造器中第一行的super
在 Java 中,子类的构造器是否需要显式调用 super
取决于父类(超类)的构造器。
-
如果父类有一个无参构造器:
- 如果父类有一个无参构造器,那么子类的构造器可以不显式调用
super
。在这种情况下,如果子类构造器的第一行没有显式调用super
或this
,编译器会自动插入一个无参的super()
调用。 - 例如:
java
class Parent { // 父类有一个无参构造器 } class Child extends Parent { // 子类构造器,自动插入 super() public Child() { // ... } }
- 如果父类有一个无参构造器,那么子类的构造器可以不显式调用
-
如果父类没有无参构造器:
- 如果父类没有无参构造器,那么子类的构造器必须在第一行显式调用
super
来调用父类的某个构造器,并且必须作为子类构造器的第一行语句。 - 例如:
java
class Parent { // 父类没有无参构造器,只有带参数的构造器 public Parent(int x) { // ... } } class Child extends Parent { // 子类构造器必须显式调用 super public Child() { super(0); // 必须作为第一行语句 // ... } }
- 如果父类没有无参构造器,那么子类的构造器必须在第一行显式调用
总结来说,如果父类提供了无参构造器,子类的构造器可以不显式调用 super
,因为编译器会自动插入这个调用。如果父类没有无参构造器,子类的构造器必须显式调用 super
并且必须放在第一行。这是 Java 构造器调用的规则,确保了对象在创建时能够正确地初始化其父类部分的状态。