父类构造器的执行顺序
时间: 2024-05-17 13:18:51 浏览: 125
父类构造器的执行顺序是在子类构造器之前。当创建一个子类对象时,首先会执行父类的构造器来初始化父类的成员变量和方法。然后才会执行子类的构造器来初始化子类的成员变量和方法。所以父类的构造器总是在子类的构造器之前执行。<span class="em">1</span><span class="em">2</span>
#### 引用[.reference_title]
- *1* *2* [Java中类初始化代码块和父类构造器执行顺序问题,](https://blog.csdn.net/weixin_40008870/article/details/114714665)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关问题
Java 子类父类构造器原理
在Java中,子类可以访问并调用其父类的构造器。这是通过所谓的“隐藏”或“隐藏链接”(hidden or chained constructor call)机制实现的。当创建一个子类的对象时,如果在子类的构造器中显式调用了父类的构造器,那么会按照子类构造器声明中的顺序执行一系列的构造器调用。
有几种情况:
1. **无参构造器**:如果没有提供特定的构造器调用,Java默认会隐式调用父类的无参构造器。例如:
```java
class Parent {
public Parent() {} // 父类无参构造器
}
class Child extends Parent {
}
```
这里,`Child`类会在实例化时自动调用`Parent`的无参构造器。
2. **带参数构造器**:如果你在子类中指定了父类的构造器,如:
```java
class Parent {
public Parent(String arg) { /* ... */ } // 父类带参数构造器
}
class Child extends Parent {
public Child(String arg1) {
super(arg1); // 明确调用父类的构造器
}
}
```
在这种情况下,你需要明确地使用`super`关键字传递参数给父类构造器。
但是super语句在子类构造器方法中,那为什么不是子类构造方法先被开辟,然后执行到super语句才会开辟父类构造方法的内存空间
在Java中,构造方法的执行顺序是先执行父类的构造方法,再执行子类的构造方法。这是因为子类构造方法中的第一条语句必须是调用父类的构造方法,否则会报编译错误。因此,当创建子类对象时,首先需要创建父类对象,然后才能创建子类对象。
当子类的构造方法调用super语句时,它实际上是在调用父类的构造方法,而不是在开辟父类构造方法的内存空间。因此,父类的构造方法会在子类的构造方法内部被执行,只不过执行的时机是在子类构造方法之前。这样就保证了父类的初始化先于子类的初始化,确保了正确的继承关系和属性的初始化。
阅读全文