作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个由两部分组成的问题:
第 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
扩展了Father
。 Child
是一种特定类型的Father
。
显示这一点的一种巧妙方法是打印 System.identityHashCode
在这两个类中,并且看到 Father
和 Chilld
构造函数都与相同的内存地址相关:
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/
我是一名优秀的程序员,十分优秀!