Вы не можете сделать это так:
O xyz = new E();
xyz = (E) xyz;
xyx.someEMethod(); // compilation error
Причина в том, что типы типов объектов Java фактически не меняют никаких значений. Скорее, они выполняют проверку типа по фактическому типу объекта.
Ваш код проверяет, что значение xyz
является E
, но затем присваивает результат приведения типа обратно к xyz
(второй оператор), таким образом снова возвращая его к O
.
Однако вы можете сделать это:
((E) xyx).someEMethod(); // fine
Круглые скобки вокруг типа являются существенными, потому что "." Оператор имеет более высокий приоритет, чем тип.