Dans la programmation informatique, typecasting signifie prendre un objet d'un type et sa conversion en un objet d'un autre type . En Java 6 , cette habitude, mais pas toujours , implique soit upcasting ou downcasting , ce qui signifie de lancer un objet vers le haut ou vers le bas de la hiérarchie d'héritage. Instructions
1
Coller les classes Java suivants dans un fichier texte vide . Il s'agit de la classe qui sera utilisée pour le tutoriel :
publique Person { }
malePerson public class de classe étend personne {}
2
Collez le upcast suivant : Photos
personne p = new malePerson ( "Tom" ) ;
la classe malePerson est une sous-classe de la personne , si ce n'est un casting haut de la hiérarchie . Upcasting est le type le plus simple de la distribution à enlever. Java sait simplement ce qu'il faut faire quand une sous-classe est affecté à l'un de ses ancêtres . Faire une note mentale , cependant : Java se souviendra toujours de ce qu'est un objet vraiment lors d'une upcast . Même maintenant que le malePerson "Tom" a été attribué à un objet générique personne , Java se souvient que cet objet est vraiment un malePerson
3
Collez le baissés suivante: .
< P > personne p = new malePerson ( "Tom" ) ;
malePerson m = ( malePerson ) p ;
abaisse des comme ça, qui se déplacent vers le bas de la hiérarchie , exiger que le programmeur de spécifier le type de classe utilisé pour la distribution entre parenthèses. Cependant, downcasting est plus complexe que upcasting
4
tentative qui suit baissés :
Personne p = new Personne ( " Jane ");
malePerson m = . ( malePerson ) p ;
Cette tentative échoue, et il ne devrait pas être difficile de voir pourquoi . Alors qu'il est raisonnable de supposer qu'un malePerson est une personne, il n'est pas raisonnable pour l'ordinateur de supposer que toutes les personnes sont MalePersons . Quelques-uns peuvent être FemalePersons , et la différence peut être ou ne pas être trivial pour les fins de l'ordinateur. Juste pour être sûr , le programme génère une erreur .
Abattu ne peut se produire si un upcast s'est produite premier , ce qui explique pourquoi le upcast à l'étape 3 était valide , mais pas à l'étape 4 . Cela peut rendre son upcasting inutile au premier abord. On peut se poser la question de savoir pourquoi le upcast a été réalisée en premier lieu , mais maintenez cette pensée
5
Considérons la méthode suivante: .
Public void saluer (Personne p) {
si (p instanceof malePerson ) {
malePerson m = ( malePerson ) p ;
m.doMaleThings ();
} else if (p instanceof femalePerson ) {
femalePerson f = ( malePerson ) p ;
f.doFemaleThings ();
} else throw new GenderConfusionException (); }
Photos
l'auteur de cette méthode n'a aucun moyen de savoir à l'avance si cette méthode sera appelée avec un malePerson ou un objet femalePerson , il utilise donc l'objet Person générique. Ensuite, il utilise la commande instanceof pour interroger la personne donnée et voir s'il devrait-il abattu comme un mâle ou une personne de sexe féminin .