Le cast en Java ..
Résolu
Mayusu
Messages postés
51
Statut
Membre
-
Mayusu Messages postés 51 Statut Membre -
Mayusu Messages postés 51 Statut Membre -
Bonsoir :D
Comment on fait le cast en java ?
En fait : J'ai deux classes A et B avec A extends B .. j'ai une méthode nommée "Meth" dans la classe B et une instance "Exmp" de la classe A (en fait elle est de la classe B mais stockée dans A) .. je veux utiliser la méthode "Meth" sur l'instance "Exmp" mais ça me sort une erreur !
Merci beaucoup d'avance :)
Comment on fait le cast en java ?
En fait : J'ai deux classes A et B avec A extends B .. j'ai une méthode nommée "Meth" dans la classe B et une instance "Exmp" de la classe A (en fait elle est de la classe B mais stockée dans A) .. je veux utiliser la méthode "Meth" sur l'instance "Exmp" mais ça me sort une erreur !
Merci beaucoup d'avance :)
3 réponses
-
Bonjour,
"elle est de la classe B mais stockée dans A"
Impossible : si A extends B, une instance de A peut être stockée dans une variable de type B, mais pas l'inverse, sauf si A=B.
Exemple :
Object obj = new Object(); // Object est B String str = obj; // String est A, extends B
Ce code est impossible, il n'y a rien qui permet de construire un String à partir d'un Object.
En revanche :
String str = "test"; // String est A, extends B Object obj = str; // Object est B
Ça c'est possible, on perd la spécificité du String mais ça reste un Object valable.
Pour l'histoire du cast en Java, cela permet de passer d'une variable de classe B à une variable de classe A extends B, uniquement si l'objet dans la variable est bien une instance de A.
String str = "test"; // String est A, extends B Object obj = str; // Object est B String str2 = (String) obj; // on caste B en A, peut échouer
Pour être propre, il vaut mieux toujours faire une vérification du type réel d'un objet avant de le caster, ça évite les surprises...
String str = "test"; // String est A, extends B Object obj = str; // Object est B if (obj!=null && !(obj instanceof String)) throw new IllegalStateException("String expected but "+obj.getClass()+" found: "+obj); String str2 = (String) obj; // on caste B en A, ne peut pas échouer
La confiance n'exclut pas le contrôle