-1

我对对象生命周期感到困惑。如果指向子类对象和方法的父类引用被覆盖。例如

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();

我理解的对象生命周期是否正确?如果没有请指导我。

  1. 新的Child()构造函数被调用

  2. 通过super()方法父类构造函数(默认构造函数)被调用

  3. 现在根据对象生命周期调用第一个构造函数并将display()父类中的方法的具体方法存储在堆中。

  4. 在子类构造函数完成执行后method1()display()方法被存储在堆内存中。

现在,如果我调用p.display()它来执行子类display()方法,但是如果您看到父类和子类display()方法都存储在堆内存中。

如果这种行为正确,那么display()在堆中存储父方法有什么用。

4

2 回答 2

0

您在项目符号 1、2 上是正确的(super()将隐含地成为您的子构造函数的第一个语句。)。方法不会存储在堆上。它只是对象的属性,对象本身存储在堆上。它只是存储在与堆分离的 perm gen 区域中的类和方法的定义。

于 2015-02-02T10:03:25.170 回答
0

这是因为您可能需要使用 super.basemethodname 从派生类中的其他方法调用类显示方法。. 在 super 中也可能会重载显示,因此您可以通过传递正确的参数来区分并调用正确的方法

于 2015-02-02T10:11:05.787 回答