Le cast en Java ..

Résolu/Fermé
Mayusu
Messages postés
43
Date d'inscription
lundi 8 septembre 2014
Statut
Membre
Dernière intervention
27 janvier 2016
- 22 mars 2015 à 22:00
Mayusu
Messages postés
43
Date d'inscription
lundi 8 septembre 2014
Statut
Membre
Dernière intervention
27 janvier 2016
- 23 mars 2015 à 10:21
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 :)

3 réponses

KX
Messages postés
16584
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 août 2022
2 972
Modifié par KX le 22/03/2015 à 22:38
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
4