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 .