Dans une instruction d'affectation (
refVar1 = refVar2;
),
le compilateur verifie que le type de la variable
refVar1
est le même ou un type parent du type de la variable
refVar2
.
Au cas contraire le compilateur affichera une erreur.
-
UpCasting :
Permet de convertir le type d'une référence vers un type parent.
La conversion (implicite ou explicite) vers un type parent est toujours acceptée par le compilateur et elle ne posera aucun problème à l'exécution du programme :
une référence d'un type parent peut, sans risque, lire/modifier les attributs ou invoquer les méthodes dont elle a accès,
indépendamment si l'instance référée et du même type ou un sous-type du type de la référence.
-
DownCasting :
Permet de convertir le type d'une référence vers un sous type.
La conversion implicite (String str1 = new Object();
) vers un sous type est toujours refusée par le compilateur.
La conversion explicite (String str2 = (String) new Object();
) vers un sous type est toujours acceptée par le compilateur.
Cependant à l'exécution du programme, la JVM va vérifier si le type de l'instance (Object
) est le même ou un sous type du type qu'on a spécifiée pour la conversion (String
) :
si ce n'est pas le cas, la JVM déclenchera une exception.