Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Vložte nasledujúce triedy Java do prázdneho textového súboru . Jedná sa o triedu , ktorá bude použitá pre tutorial :
public class Osoba { }
public class MalePerson rozširuje Osoba { }
2
vložte nasledujúci Povýšenie :
osoba p = new MalePerson ( " Tom " ) ;
trieda MalePerson je podtriedou osoba , takže to je obsadenie do hierarchie . Upcasting je najjednoduchší typ obsadenie zložiť . Java jednoducho vie , čo robiť , keď je podtrieda zaradí do jednej z jej predkov . Skúste si zapamätať , však : Java bude vždy pamätať , čo objekt je skutočne počas Povýšenie . Dokonca aj teraz , že MalePerson " Tom " bola priradená k druhovej osoba objektu , Java si pamätá , že tento objekt je naozaj MalePerson
3
vložte nasledujúci sklopenými : .
< P > Osoba p = new MalePerson ( " Tom " ) ;
MalePerson m = ( MalePerson ) p ;
Downcasts takto, že sa pohybujete smerom nadol hierarchiou , vyžadujú , aby programátor určiť typ triedy sa používa pre obsadenie v zátvorkách . Avšak , downcasting je zložitejšie ako upcasting
4
Pokus nasledujúce sklopenými :
Osoba p = new Person ( " Jane " ) ;
MalePerson m = . ( MalePerson ) p ;
Tento pokus zlyhá , a to by nemalo byť ťažké pochopiť , prečo . Aj keď je rozumné predpokladať , že MalePerson je osoba , to nie je rozumné pre počítač predpokladať , že všetky osoby sú MalePersons . Málo môže byť FemalePersons , a rozdiel môže alebo nemusí byť triviálne na účely tohto počítača . Len pre istotu , program vyvolá chybu .
Odklopené môže dôjsť len vtedy , ak Povýšenie došlo k prvej , čo je dôvod , prečo Povýšenie v kroku 3 bola platná , ale nie v kroku 4. To môže znieť upcasting k ničomu na prvom mieste . To vyvoláva otázku , prečo bol Povýšenie vykonaná na prvom mieste , ale myslí , že myšlienku
5
Zvážte nasledujúce metódy : .
Public void Greet ( osoba p ) {
if ( p instanceof MalePerson ) {
MalePerson m = ( MalePerson ) p ;
m.doMaleThings ( ) ;
} else if ( p instanceof FemalePerson ) {
FemalePerson f = MalePerson ) p ( ;
f.doFemaleThings ( ) ;
} else throw new GenderConfusionException ( ) ;
}
autor tejto metódy nemá žiadny spôsob , ako vedieť vopred, či táto metóda bude volaná s MalePerson alebo objekt FemalePerson , a tak sa používa všeobecný Osoba objekt . Potom sa používa instanceof príkaz na hlasovanie osobe , dané a zistiť , či by sa mal ju skleslý ako mužské alebo ženské osobe .