Java 指向子类对象的父类引用
我对对象的生命周期感到困惑。如果重写了指向子类对象和方法的父类引用。比如说Java 指向子类对象的父类引用,java,heap-memory,overriding,object-create,Java,Heap Memory,Overriding,Object Create,我对对象的生命周期感到困惑。如果重写了指向子类对象和方法的父类引用。比如说 class Parent { public void display(){ System.out.println("i am from Parent"); } } class Child extends Parent { public void method1() { } public void display(){ System.o
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()
method存储在堆中method1()
和display()
方法存储在堆内存中p.display()
它将执行子类display()
方法,但是如果您看到存储在堆内存中的父类和子类display()
方法
如果这种行为正确,那么在堆中存储父级的
display()
方法有什么用呢 项目符号1、2是正确的(super()
将隐式地成为子构造函数的第一条语句)。方法未存储在堆上。它只是对象的属性,对象本身存储在堆上。这只是存储在perm gen区域中的类和方法的定义,它与堆是分开的。这是因为您可能需要使用super.basemethodname从派生类中的其他方法调用类显示方法。此外,super中的display可能会过载,因此您可以通过传递正确的参数来区分并调用正确的方法您可以轻松测试所有问题。这两种方法的行为不同。它们不一样。如果要执行父方法,则需要将其呈现。创建child.Methods的实例时,父构造函数将在子构造函数之前被调用。方法将存储在permgen空间(方法区域)中。但它们是否全部存储以及何时存储取决于实现。您误解并混淆了不相关的概念,例如:对象生命周期类加载(负责加载类型定义及其方法的类);类构造函数实例构造函数;对象和方法;等