Pourquoi coulé après un instanceOf?

Dans l'exemple ci-dessous (à partir de mon coursepack), nous voulons donner à la Square instance c1 la référence d'un autre objet p1, mais uniquement si les 2 sont de types compatibles.

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

Ce que je ne comprends pas ici, c'est que nous avons d'abord vérifier que p1 est en effet un Square, et puis nous avons encore de voter pour elle. Si c'est un Square, pourquoi cast?

Je soupçonne que la réponse se trouve dans la distinction entre l'apparent et les types réels, mais je suis confus néanmoins...

Edit:

Comment le compilateur de traiter:

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

Edit2:

C'est la question que instanceof vérifie l' réelle type plutôt que de la apparente type? Et alors que le casting change la apparente type?

Merci,

JDelage

  • C'est pourquoi il demande une question delnan...
  • S'agissant de la question dans votre montage, pourquoi ne pas simplement essayer de le compiler vous-même? Vous n'avez pas besoin DONC de la communauté à agir comme un compilateur pour vous.
  • Peters - point est bien pris, mon intérêt n'est pas vraiment ce qui allait se passer, mais plus de différences dans la façon dont le compilateur aurait parse que.
InformationsquelleAutor JDelage | 2010-11-15