Imaginez une classe Extension du chalet et le code
Building building = new Building();
Cottage cottage = (Cottage)building;
Il est tout à fait logique que Bâtiment ne peut pas être lancé vers Cottage Compte tenu de la nature de l'héritage Java, ce qui n'a pas de sens (pour moi), c'est que cela compile. Pourquoi compile-t-il et ensuite lance-t-il un runtime ClassCastException ?
N'est-il pas évident que bâtiment est une référence à un Bâtiment avant d'exécuter le programme ?
Comme il s'agit d'une question générale, je sais que je risque d'avoir un doublon :) mais je n'ai pas trouvé de réponse à la question "pourquoi ça compile" :)
EDIT2 J'ai accepté une excellente réponse ici (sans parler de la discussion qui suit :) ), mais je trouve toujours la réponse acceptée dans Le casting Java entraîne une erreur d'exécution au lieu d'une erreur de compilation le plus intéressant...
EDIT J'ai édité IllegalCastException et mettre le bon ClassCastException