Когда экземпляр дочернего класса становится экземпляром родительского класса
Он не "становится" .Это "есть" .A Child
равен a Parent
, так же как Banana
равен a Fruit
.
И this
представляет текущийэкземпляр класса
this
представляет текущий экземпляр класса .Во время выполнения существует только один объект, а не несколько объектов, а не несколько слоев на основе иерархии классов.Там один объект.Period.
И это представляет текущий класс Instance, так почему я получаю имя класса 4 Child?
Каждый экземпляр / объект, который живет во время выполнения, был создан сnew
ключевое слово.Класс, с которым был использован new
, является классом времени выполнения этого объекта (это упрощенное утверждение).Класс выполнения - это тот, который возвращается при вызове getClass()
.
. Во всех этих случаях Child
- это класс выполнения экземпляра, на который obj
указывает:
Child obj = new Child();
Parent obj = new Child();
//and all the possible intermediate parents, until
Object obj = new Child();
ИЛИ При расширении создает ли он две копии методов для соответствующих родительских и дочерних классов, которые наследуются в памяти?
Самый простой способ думать об этом:
- Когда объект создается, Java знает класс времени выполнения этого объекта (см. Выше).
- С классом времени выполнения она знает, какие методы и атрибуты доступны для этого объекта, чтообъявлены в этом классе времени выполнения (
Child
, в вашем случае) - С классом времени выполнения он знает, какие методы и атрибуты наследуются от родительских типов этого объекта (
Parent
и Object
вваш случай) - С классом времени выполнения Java знает, какие методы, унаследованные и переопределенные им, будут выполнены согласно дочернему классу (у вас нет переопределенных методов).
Так вотЕсли вы пишете this
, вы ссылаетесь на один объект, с которым вызывается текущий код.С помощью this
вы можете ссылаться на методы и атрибуты, объявленные также в классе времени выполнения, и те, которые доступны из супертипов.
Когда вы пишете super
, вы по-прежнему ссылаетесь на один объект, с которым вызывается текущий код.И на что вы ссылаетесь, используя super
, это явно методы или атрибуты, объявленные в родительском классе того класса, который объявляет исполняемый в данный момент код.