Ссылка на родительский класс, указывающая на дочерний класс 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();
Является ли мое понимание объекта жизненного цикла правильным или нет? Если нет, пожалуйста, ведите меня.
новый
Child()
конструктор называетсяот
super()
метод родительского класса (конструктор по умолчанию) вызываетсяТеперь в соответствии с жизненным циклом объекта вызывается первый конструктор и конкретный метод, который
display()
метод из родительского класса хранится в куче.после того, как дочерний конструктор класса завершит выполнение и
method1()
а такжеdisplay()
метод хранится в памяти кучи.
Теперь, если я позвоню p.display()
собирается выполнить дочерний класс display()
метод, но если вы видите родительский и дочерний класс display()
метод хранится в памяти кучи.
Если это поведение правильно, то какая польза от хранения display()
метод родителя в куче.
2 ответа
Вы правы в пуле 1, 2 (super()
будет неявно первым утверждением вашего дочернего конструктора.). Метод не хранится в куче. Это только свойства объекта, а сам объект хранится в Heap. Это просто определение класса и методов, хранящихся в области perm gen, которая отделена от кучи.
Это потому, что вам может потребоваться вызвать метод отображения класса из какого-либо другого метода в производном классе, используя super.basemethodname., Кроме того, отображение может быть перегружено в супер, так что вы можете различать и вызывать правильный метод, передавая правильные аргументы