I datorprogrammering, hänvisar Typecasting att ta ett objekt av en typ och omvandla den till ett objekt av annan typ. I Java 6 , detta oftast , men inte alltid , innebär antingen upcasting eller downcasting , vilket innebär att kasta ett föremål uppåt eller nedåt i hierarkin arv <. br > 1 .
Klistra in följande Java-klasser i en tom textfil . Dessa är den klass som kommer att användas för handledningen :
public class Person { }
public class MalePerson utökar Person { }
2 .
Klistra in följande upcast :
Person p=new MalePerson ( " Tom " ) ;
MalePerson klass är en underklass av person, så detta är ett kasta upp i hierarkin . Upcasting är den enklaste typen av rösterna för att dra bort . Java vet helt enkelt vad göra när en underklass har tilldelats ett av sina förfäder . Gör en mental anteckning dock : Java kommer alltid att minnas vad ett objekt egentligen är under en upcast . Även nu när MalePerson "Tom " har tilldelats ett generiskt person objekt , minns Java som det här objektet verkligen är en MalePerson .
3
Klistra in följande bedrövad .
Person p=new MalePerson ( " Tom " ) ;
MalePerson m=( MalePerson ) p ;
Downcasts såhär, att flytta ner i hierarkin , kräver att programmeraren att ange klass typ som används för gjutna i parentes . Dock är downcasting mer komplext än upcasting
4
Försök följande bedrövad : .
Person p=new Person ( " Jane " ) ;
MalePerson m=( MalePerson ) p ;
Detta försök misslyckas , och Det bör inte vara svårt att se varför . Även om det är rimligt att anta att en MalePerson är en person , är det inte rimligt för datorn att anta att alla människor är MalePersons . Några kan vara FemalePersons , och skillnaden kan eller inte vara av ringa betydelse för datorns ändamål . Bara för att vara säker , kastar programmet ett fel .
En nedslagen bara kan uppstå om en upcast har uppstått först, vilket är anledningen till att upcast i steg 3 är giltigt , men inte i steg 4 . Detta kan göra upcasting ljud värdelös i början. Det väcker frågan om varför upcast utfördes i första hand , men håll den tanken . .
5
Betrakta följande metod :
public void hälsar ( Person p ) {
Om ( p instanceof MalePerson ) {
MalePerson m=( MalePerson ) p ;
m. doMaleThings () ;
} else if ( p instanceof FemalePerson ) {
FemalePerson f=( MalePerson ) p ;
f. doFemaleThings () ;
} else kasta nytt GenderConfusionException ( ) ;
}
Författaren till denna metod har ingen möjlighet att veta i förväg om denna metod kommer att kallas med ett MalePerson eller FemalePerson objekt , så han använder den generiska Person -objekt . Sedan använder han instanceof kommandot att hämta den person som får och se om han skulle nedslagna det som en manlig eller en kvinnlig person .
Previous:nothing Next:Hur ändrar jag namnet på en blankett från en konstruktör ?