В приведенном ниже примере (из моего набора курсов) мы хотим дать экземпляру Square
экземпляру c1
ссылку на некоторые другой объект p1
, но только если эти два объекта относятся к совместимым типам.
if (p1 instanceof Square) {c1 = (Square) p1;}
Что я не делаю ' Я понимаю, что мы сначала проверяем, что p1
действительно является квадратом
, а затем мы все равно его бросаем. Если это Квадрат
, зачем бросать?
Я подозреваю, что ответ заключается в различии между видимым и действительным типами, но я все равно запутался ...
Изменить:
Как бы компилятор обрабатывает:
if (p1 instanceof Square) {c1 = p1;}
Edit2:
Проблема в том, что instanceof
проверяет фактический тип , а не очевидный тип ? И затем, что приведение изменяет очевидный тип?
Спасибо,
JDelage