] Зачем приведение после instanceOf?

В приведенном ниже примере (из моего набора курсов) мы хотим дать экземпляру Square экземпляру c1 ссылку на некоторые другой объект p1 , но только если эти два объекта относятся к совместимым типам.

if (p1 instanceof Square) {c1 = (Square) p1;}

Что я не делаю ' Я понимаю, что мы сначала проверяем, что p1 действительно является квадратом , а затем мы все равно его бросаем. Если это Квадрат , зачем бросать?

Я подозреваю, что ответ заключается в различии между видимым и действительным типами, но я все равно запутался ...

Изменить:
Как бы компилятор обрабатывает:

if (p1 instanceof Square) {c1 = p1;}

Edit2:
Проблема в том, что instanceof проверяет фактический тип , а не очевидный тип ? И затем, что приведение изменяет очевидный тип?

Спасибо,

JDelage

23
задан JDelage 16 November 2010 в 08:47
поделиться