In het programmeren van computers , typecasting verwijst naar het nemen van een object van een bepaald type en omzetten in een object van een ander type . In Java 6 , dit meestal , maar niet altijd , gaat ofwel upcasting of downcasting , wat betekent dat een object werpen omhoog of omlaag het overervingshiërarchie . Instructies 1 Plak volgende Java-klassen in een leeg tekstbestand . Dit zijn de klasse die wordt gebruikt voor de tutorial : public class Persoon { } openbare klasse MalePerson breidt Persoon { } kopen van 2 Plak volgende upcast : persoon p = new MalePerson ( " Tom " ) ; de MalePerson klasse is een subklasse van de persoon , dus dit is een cast van de hiërarchie . Upcasting is de eenvoudigste vorm van gegoten om af te trekken . Java weet gewoon wat te doen als een subklasse is toegewezen aan een van zijn voorouders . Maak een mentale notitie echter : Java zal altijd onthouden wat een object is eigenlijk tijdens een upcast . Zelfs nu dat de MalePerson " Tom " is toegewezen aan een generieke persoon voorwerp , Java herinnert zich dat dit object is echt een MalePerson 3 Plak volgende terneergeslagen : . Person p = new MalePerson ( " Tom " ) ; MalePerson m = ( MalePerson ) p ; Downcasts als dit , dat beweging door de hiërarchie , moet de programmeur om het type klasse opgeven wordt gebruikt om aan te gieten haakjes . Echter , downcasting is complexer dan upcasting Poging 4 de volgende terneergeslagen : Persoon p = new Persoon ( " Jane " ) ; MalePerson m = . ( MalePerson ) p ; Deze poging mislukt , en het zou niet moeilijk te zien waarom . Hoewel het redelijk te veronderstellen dat een MalePerson is een persoon, is het niet redelijk om de computer te veronderstellen dat alle personen zijn MalePersons . Enkele kan FemalePersons , en het verschil kan wel of niet triviaal behoeve van de computer . Gewoon om veilig te zijn , het programma een foutmelding geeft . Een neerslachtig kan alleen optreden als een upcast eerst heeft plaatsgevonden , dat is de reden waarom de upcast in stap 3 geldig was , maar niet in stap 4 . Dit kan upcasting geluid nutteloos op het eerste te maken . Het roept de vraag op waarom de upcast werd uitgevoerd in de eerste plaats , maar houd die gedachte 5 Beschouw de volgende methode : . Public void greet ( Persoon p ) { < > if ( p instanceof MalePerson ) { MalePerson m = ( MalePerson ) p; m.doMaleThings ( ) op ; } br else if ( p instanceof FemalePerson ) { FemalePerson f = ( MalePerson ) p ; f.doFemaleThings ( ) ; } anders werpen nieuw GenderConfusionException ( ) ; } de schrijver van deze methode heeft geen manier om te weten op voorhand of deze methode wordt aangeroepen met een MalePerson of een FemalePerson object , dus hij maakt gebruik van de generieke Person object . Daarna gebruikt hij de instanceof opdracht om de persoon gegeven pollen en zien of hij zou neerslachtig het als een mannelijke of een vrouwelijke persoon .
|