February 27
In programmazione, typecasting si riferisce a prendere un oggetto di un tipo e convertirlo 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à.
1 Incollare le seguenti classi Java in un file di testo vuoto. Questi sono la classe che verrà utilizzata per l'esercitazione:
Persona public class {}
public class MalePerson estende Person {}
2 Incollare il seguente upcast:
Person p = new MalePerson("Tom");
La classe MalePerson è una sottoclasse di una persona, quindi questo è un calco in alto nella gerarchia. Upcasting è il tipo più semplice del 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 è in realtà nel corso di una upcast. Anche ora che il MalePerson "Tom" è stato assegnato a un oggetto persona generica, Java si ricorda che questo oggetto è davvero un MalePerson.
3 Incollare il seguente bassi:
Person p = new MalePerson("Tom");
MalePerson m = (MalePerson) p;
Downcasts come questo, che si muovono verso il basso della gerarchia, richiedono al programmatore di specificare il tipo di classe viene utilizzato per il cast tra parentesi. Tuttavia, downcasting è più complessa upcasting.
4 Tentare il seguente bassi:
Person p = new Person("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 fini del computer. Giusto per essere sicuri, il programma genera un errore.
Un abbattuto può verificarsi solo se un upcast si è verificato prima, che è il motivo per cui il upcast al punto 3 era valido, ma non al punto 4. Questo può rendere upcasting suono inutile in un primo momento. Si pone la questione del perché la upcast è stata eseguita, in primo luogo, ma sostengono che il pensiero.
5 Si consideri il seguente metodo:
public void Greet (Person 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 ();
}
L'autore di questo metodo non ha alcun modo di sapere in anticipo se questo metodo sarà chiamato con un MalePerson o di un oggetto FemalePerson, quindi utilizza l'oggetto Person generico. Poi, si utilizza il comando instanceof per interrogare la persona determinata e vedere se doveva downcast come un maschio o una persona di sesso femminile.