gpt4 book ai didi

java - 如果我们创建一个子类的对象,会不会有父类的对象创建?

转载 作者:搜寻专家 更新时间:2023-11-01 02:36:27 25 4
gpt4 key购买 nike

我知道每次创建子类对象都会调用super。但是,我特别想知道的是它会加载类还是会创建该父类的对象。

提前致谢。

最佳答案

您有一个单个对象。
当一个类被实例化时,它首先调用父类的构造函数。对于每个父类,它遵循相同的逻辑:它首先调用父类的构造函数。

假设:A 扩展B 扩展C

new A() 导致 B 构造函数调用,该构造函数自身调用 C 构造函数。
作为 C 然后返回 B 构造函数调用,A 构造函数可以继续并创建实例 A

But, what I specifically want to know is that will it load the class or will it create the object of that parent class.

类似于构造函数的执行,在加载一个类之前,必须首先加载它的父类,然后递归地为每个父类加载。

这里对应于 A extends B extends C 的类:

class C {
public C(){
System.out.println("C constructor");
}
}

class B extends C{
public B() {
System.out.println("B constructor");
}

}
class A extends B{
public A() {
System.out.println("A constructor");
}
}


public class Test {
public static void main(String[] args) {
new A();
}
}

编译这些类,然后执行 Test 类,该类通过指定 在其 main() 方法中创建一个 A 实例java 命令中的 -verbose 标志(默认情况下启用类日志):

java -verbose Test

你应该在输出标准中看到如下内容:

[Loaded java.lang.Object from C:\...][Loaded java.io.Serializable from C:\...]... // load all classes required until loaded C, B and A classes[Loaded C from file:/C:/...][Loaded B from file:/C:/...][Loaded A from file:/C:/...]C constructorB constructorA constructor

它确认:

  • 首先需要加载父类,从根父类(Object)开始,直到最近的父类(B)。
  • 在加载层次结构的所有类之前不执行构造函数
  • 父类的构造函数总是在实例化类的构造函数之前执行,从根父构造函数(Object)开始,直到最近的父构造函数(B) ).

关于java - 如果我们创建一个子类的对象,会不会有父类的对象创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49627652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com