创建子类对象时,一定将先执行继承自父类的无参构造函数,然后再执行自己的构造函数
时间: 2024-04-12 16:29:01 浏览: 100
在 Java 中,创建子类对象时,确实会先执行继承自父类的无参构造函数,然后再执行子类自己的构造函数。这是因为子类在创建对象时,会先初始化父类的部分,然后再初始化自己的部分。
当子类的构造函数被调用时,如果没有显式调用父类的构造函数,Java 编译器会默认在子类的构造函数中插入一个隐式的 `super()` 调用,以确保父类的构造函数被调用。这样就会先执行父类的构造函数。
例如,假设有以下的父类和子类:
```java
public class ParentClass {
public ParentClass() {
System.out.println("父类的无参构造函数");
}
}
public class ChildClass extends ParentClass {
public ChildClass() {
System.out.println("子类的无参构造函数");
}
}
```
当创建子类对象时,会先执行父类的无参构造函数,然后再执行子类的无参构造函数。输出结果为:
```
父类的无参构造函数
子类的无参构造函数
```
需要注意的是,如果父类中没有无参构造函数,而只有有参构造函数,那么子类必须显式调用父类的有参构造函数,并传入相应的参数。否则编译会报错。
相关问题
c++子类调用父类函数构造流程
C++子类调用父类构造函数的流程如下:
1. 子类构造函数开始执行。
2. 如果子类构造函数中没有显式调用父类构造函数,则会默认调用父类的无参构造函数。
3. 如果子类构造函数中显式调用了父类构造函数,则会先执行父类构造函数,再执行子类构造函数。
4. 如果子类构造函数中显式调用了父类的有参构造函数,则需要在子类构造函数的初始化列表中指定父类构造函数的参数。
在上述代码中,Student类继承自Person类,Student类的构造函数中显式调用了Person类的有参构造函数,并在初始化列表中指定了参数。因此,在创建Student对象时,会先执行Person类的构造函数,再执行Student类的构造函数。
阅读全文