С (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, вы должны использовать их общий базовый класс и поместить туда общие свойства.
Отредактировано с более подробным объяснением.