Ссылка на родительский класс, указывающая на дочерний класс Object

У меня путаница в жизненном цикле объекта. Если ссылка на родительский класс, указывающая на объект и метод дочернего класса, переопределена. Например

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() метод родителя в куче.

2 ответа

Вы правы в пуле 1, 2 (super() будет неявно первым утверждением вашего дочернего конструктора.). Метод не хранится в куче. Это только свойства объекта, а сам объект хранится в Heap. Это просто определение класса и методов, хранящихся в области perm gen, которая отделена от кучи.

Это потому, что вам может потребоваться вызвать метод отображения класса из какого-либо другого метода в производном классе, используя super.basemethodname., Кроме того, отображение может быть перегружено в супер, так что вы можете различать и вызывать правильный метод, передавая правильные аргументы

Другие вопросы по тегам