Observez tout d'abord le programme ci-dessous. La classe Chien étend la classe Animal. Par le fait que la classe Chien étend la classe Animal, tout objet de la classe Chien est aussi une instance de la classe Animal
mais le contraire n'est pas vrai. Néanmoins, si un objet
référencé par une référence d'Animal est en fait un Chien, on peut avoir accès aux champs spécifique de la classe Chien ; cela nécessite une conversion de classe, encore appelé transtypage.
À l'exécution, si on applique une conversion de classe
qui se trouve être illégitime (voir l'exemple ci-dessous),
une exception de type java.lang.ClassCastException est lancée.
class Animal {A l'exécution on obtient :
}
class Chien extends Animal {
int taille = 80;
}
class Conversion {
public static void main(String argv[]) {
Animal animal;
Chien chien = new Chien();
animal = chien;
chien = (Chien)animal; //conversion de classe
System.out.println("un chien mesure : " + chien.taille + " cm");
animal = new Animal();
chien = (Chien)animal; //conversion de classe
}
}
un chien mesure : 80 cmLa conversion de classe s'obtient donc en mettant le nom de la classe vers laquelle on veut faire la conversion entre des parenthèses. Si on a la déclaration :
Exception in thread "main" java.lang.ClassCastException: Animal cannot be cast to Chien
at Conversion.main(Conversion.java:19)
Le fichier Conversion.java contenant l'exemple ci-dessus.
© Irène Charon Télécom ParisTech 2012