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