Nella programmazione di computer , fusione di caratteri si riferisce a prendere un oggetto di un tipo e la sua conversione in un oggetto di un altro tipo . In Java 6 , questo di solito , ma non sempre , coinvolge sia upcasting o downcasting , che significa lanciare un oggetto verso l'alto o verso il basso la gerarchia di ereditarietà . Istruzioni
1
incollare le seguenti classi Java in un file di testo vuoto . Questi sono la classe che verrà utilizzata per il tutorial :
class Person { }
MalePerson public class public Persona { }
2
Incollare il seguente upcast :
persona p = new MalePerson ( " Tom " ) ;
la classe MalePerson è una sottoclasse di persona, quindi questo è un cast in alto nella gerarchia . Upcasting è il più semplice tipo di cast per tirare fuori . Java sa semplicemente cosa fare quando una sottoclasse è assegnato a uno dei suoi antenati . Fare una nota mentale , però : Java sarà sempre ricordare ciò che un oggetto è realmente nel corso di una upcast . Anche ora che la MalePerson " Tom" è stato assegnato a un oggetto persona generico , Java ricorda che questo oggetto è davvero un MalePerson
3
Incollare il seguente abbattuto : .
< P > persona p = new MalePerson ( " Tom " ) ;
MalePerson m = ( MalePerson ) p ;
downcast come questo , che si muovono verso il basso della gerarchia, richiede al programmatore di specificare il tipo di classe utilizzato per il cast in parentesi . Tuttavia, downcasting è più complessa di upcasting
4
Tentativo seguente abbattuto :
Persona p = new Persona ( " Jane " ) ;
MalePerson m = . ( MalePerson ) p ;
Questo tentativo non riesce , e non dovrebbe essere difficile capire perché . Mentre è ragionevole supporre che un MalePerson è una persona, non è ragionevole per il computer per scontato che tutte le persone sono MalePersons . Alcuni possono essere FemalePersons , e la differenza può o non può essere banale per scopi del computer . Giusto per essere sicuri, il programma genera un errore .
Abbattuto può avvenire solo se un upcast è verificato prima , motivo per cui il upcast al punto 3 era valido , ma non al punto 4. Questo può rendere il suono upcasting inutile in un primo momento . Si pone la questione del perché la upcast è stata eseguita in primo luogo , ma sostengono che il pensiero
5
consideri il seguente metodo : .
Public void saluta (Persona p ) {
se ( p instanceof MalePerson ) {
MalePerson m = ( MalePerson ) p ;
m.doMaleThings () ;
} else if ( p instanceof FemalePerson ) {
FemalePerson f = ( MalePerson ) p ;
f.doFemaleThings ();
} else throw new GenderConfusionException ( ) ;
}
l'autore di questo metodo non ha alcun modo di sapere in anticipo se questo metodo viene chiamato con un MalePerson o un oggetto FemalePerson , così usa l' oggetto Person generico . Poi , usa il comando instanceof per eseguire il polling della Persona dato e vedere se lui dovrebbe farlo abbattuto come un maschio o di una persona di sesso femminile .