gpt4 book ai didi

java - 每次实例化子类时都会创建父类(super class)对象吗?

转载 作者:行者123 更新时间:2023-12-02 02:03:58 24 4
gpt4 key购买 nike

这是一个由两部分组成的问题:

第 1 部分:

public class Test {

public static void main(String[] args) {

System.out.println("Main Started");
Child c = new Child(); //Instantiating Child Class
System.out.println("Main Ended");
}

}

class Father{

Father(){ //Father Class Default Constructor
System.out.println("I am in Father");
}

void show(){
System.out.println("Hello World");
}
}

class Child extends Father{

Child(){ //Child Class Default Constructor
System.out.println("I am in Child");
}
}

输出:

Main Started
I am in Father
I am in Child
Main Ended

这就是我知道在编译时发生的事情

class Child extends Father{

Child(){ //Child Class Default Constructor
super();
System.out.println("I am in Child");
}
}

这里我的问题是,因为它将进入 Father 的默认构造函数执行 Child 的默认构造函数之前的类类,是否有为Father创建的对象?

如果是这样,那么它被分配给什么?或者它是否类似于像 new Father(); 这样的匿名对象。是Object创建每次调用构造函数?

第 2 部分

每次我为Child创建一个对象时类,Father的默认构造函数将使用 super(); 调用类Child()内.

当我尝试调用 Father 中的任何方法时会发生什么使用Child目的?它会再次为Father创建一个匿名对象吗? ,使用该对象执行然后将其保留为 Garbage Collector照顾?

因此,仅仅因为我们多次尝试访问 super 类的成员,这不会导致大量的内存浪费吗?

在上述场景中内存管理将如何进行?

最佳答案

当您创建实例时,您并不是在创建额外实例。 Child 实例也是一个Father 实例,因为Child 扩展了FatherChild 是一种特定类型的Father

显示这一点的一种巧妙方法是打印 System.identityHashCode在这两个类中,并且看到 FatherChilld 构造函数都与相同的内存地址相关:

public class Test {
public static void main(String[] args) {

System.out.println("Main Started");
Child c = new Child(); //Instantiating Child Class
System.out.println("Main Ended");
}

}

class Father{

Father(){ //Father Class Default Constructor
System.out.println("I am in Father in address " + System.identityHashCode(this));
}

void show(){
System.out.println("Hello World");
}
}

class Child extends Father{

Child(){ //Child Class Default Constructor
System.out.println("I am in Child in address " + System.identityHashCode(this));
}
}

以及示例输出:

Main Started
I am in Father in address 2001049719
I am in Child in address 2001049719
Main Ended

关于java - 每次实例化子类时都会创建父类(super class)对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51112425/

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