Come Typecast in Java 6

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à.

istruzione

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.