指向Child类Object的父类引用

时间:2015-02-02 09:57:57

标签: java heap-memory override 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.out.println("i am from Child class");
     }
}

现在,如果我在主类中创建

Parent p = new Child();

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

你在子弹1,2上是正确的(super()将隐含第一个你的子构造函数的声明。)。方法不会存储在堆上。它只是一个对象的属性,对象本身存储在Heap上。它只是存储在perm gen区域中的类和方法的定义,它与堆分开。

答案 1 :(得分:0)

因为您可能需要使用super.basemethodname从派生类中的其他方法调用类显示方法。 。显示也可能在超级中重载,所以你可以通过传递右箭头来区分nd调用正确的方法