Java не поддерживает это. Вы можете использовать полиморфизм для обработки экземпляра B
как и экземпляра A
, но не наоборот.
Причина, по которой вы не можете этого сделать, заключается в том, что не существует безопасного типа для гарантии того, что ваш экземпляр A
на самом деле является экземпляром B
(вы могли бы разыграть этот экземпляр, но даже если бы вы это сделали, вы бы только гарантируете себе исключение во время исполнения).
Лучший способ определить, существует ли типобезопасная полиморфная связь между типами, - это проверить правильность этого утверждения:
Любой экземпляр какого-либо типа является экземпляром другого типа.
Например:
Любой экземпляр Dog является экземпляром Mammal.
Любой экземпляр Mammal является экземпляром Dog.
Обратите внимание, что первый пример верен, а второй ложен. То, что вы пытаетесь сделать в своем примере кода, точно так же, как пытаться относиться к любому млекопитающему как к собаке - даже если иногда это может быть правдой, это категорически неверно, что означает, что компилятор не допустит этого.
Опять же, для случаев, когда это может быть правдой, вы должны привести ссылку, но это открывает вам исключения во время выполнения. Ваш конкретный пример, приведенный выше, является одним из тех случаев, когда возникает исключение, поскольку мы можем четко видеть, что вы создали экземпляр типа A
.