我在对象生命周期中感到困惑。如果覆盖指向子类对象和方法的父类引用。例如
class Parent {
public void display(){
System.out.println("i am from Parent");
}
}
class Child extends Parent {
public void method1() { }
public void display(){
System.out.println("i am from Child class");
}
}
现在,如果我在主类中创建
Parent p = new Child();
我的理解对象生命周期是否合适?如果没有,请指导我。
新的Child()
构造函数被调用
通过super()
方法父类构造函数(默认构造函数)调用
现在根据对象生命周期第一个构造函数被调用,具体方法是来自父类的display()
方法存储在堆中。
在Child类构造函数完成执行后,method1()
和display()
方法存储在堆内存中。
现在,如果我调用p.display()
它将执行子类display()
方法,但是如果你看到父类和子类display()
方法都存储在堆内存中。
如果这种行为正确,那么在堆中存储父{的display()
方法有什么用。
答案 0 :(得分:0)
你在子弹1,2上是正确的(super()
将隐含第一个你的子构造函数的声明。)。方法不会存储在堆上。它只是一个对象的属性,对象本身存储在Heap上。它只是存储在perm gen区域中的类和方法的定义,它与堆分开。
答案 1 :(得分:0)
因为您可能需要使用super.basemethodname从派生类中的其他方法调用类显示方法。 。显示也可能在超级中重载,所以你可以通过传递右箭头来区分nd调用正确的方法