【发布时间】:2015-02-02 09:57:57
【问题描述】:
我对对象生命周期感到困惑。如果指向子类对象和方法的父类引用被覆盖。例如
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()方法的具体方法存储在堆中。在子类构造函数完成执行后,
method1()和display()方法被存储在堆内存中。
现在,如果我调用p.display(),它将执行子类display() 方法,但是如果您看到父类和子类display() 方法都存储在堆内存中。
如果这种行为正确,那么在堆中存储父级的display() 方法有什么用。
【问题讨论】:
-
您可以轻松测试所有问题。
-
两种方法的行为不同。他们不一样。如果你想执行父方法,它需要存在
-
创建子实例时,在子构造函数之前调用父构造函数。
-
方法存储在永久空间(方法区域)中。但是否全部存储以及存储时间取决于实现。
-
你误解和混淆了不相关的概念,例如:对象生命周期
类加载(这个负责加载类型定义及其方法);类构造函数 实例构造函数;对象 方法;等
标签: java heap-memory overriding object-create