Java Прогнозирование и понижение и наследование - PullRequest
0 голосов
/ 23 марта 2020

Допустим, есть один суперкласс и два подкласса.

Почему Java не допускает такой сценарий:

B -> A (A is superclass of class B)
C -> A
ObjectC c = (ObjectC)(ObjectA)b;

Таким образом, я мог бы сопоставить общие свойства объекта b с объект c.

1 Ответ

0 голосов
/ 23 марта 2020

С (ObjectA)b у вас есть выражение, если вычисление приводит к ссылке типа ObjectA (ObjectA ab = (ObjectA) b). Фактический тип экземпляра объекта (в памяти) не изменяется, меняется только дескриптор, с которым вы его держите (ссылка). Вы не можете привести эту ссылку к ObjectC, потому что базовый экземпляр объекта (изначально b) имеет тип ObjectB.

Допустим, мы допустили то, что вы написали в вопросе ObjectC c = (ObjectC)(ObjectA)b. Если вы оцените это, вы получите ссылку типа Object C на экземпляр объекта b. Допустим, у Object C есть метод run (), но, конечно, ObjectB не обязательно должен иметь метод run (). Что произойдет, когда вы позвоните c.run()?

Если вы хотите отобразить общие свойства от объекта b к объекту c, вы должны использовать их общий базовый класс и поместить туда общие свойства.

Отредактировано с более подробным объяснением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...