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: . 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 .
|