Parent p=new Child(); Child c=(Child)p; // преобразование будет успешным. Parent p2=new Child2(); Child c2=(Child)p2; // во время исполнения возникнет ошибка!
Чтобы проверить, возможен ли желаемый переход, можно воспользоваться оператором instanceof:
Parent p=new Child(); if (p instanceof Child) { Child c = (Child)p; } Parent p2=new Child2(); if (p2 instanceof Child) { Child c = (Child)p2; } Parent p3=new Parent(); if (p3 instanceof Child) { Child c = (Child)p3; }
В данном примере ошибок не возникнет. Первое преобразование возможно, и оно будет осуществлено. Во втором и третьем случаях условия операторов if не сработают и попыток некорректного перехода не будет.
На данный момент можно назвать лишь одно сужающее преобразование:
С изучением остальных ссылочных типов (интерфейсов и массивов) этот список будет расширяться.