Bocchi Cinzia

Ultimo aggiornamento: 30/10/2009
1
Ereditarieta' e polimorfismo

Introduzione
Consideriamo la seguente gerarchia di classi.

Persona
Impiegato Studente


La gerarchia mostra che un impiegato è una persona e che uno studente è una
persona. Invece, una persona può essere un impiegato o uno studente, ma non
entrambi.
Supponiamo che, per ogni persona, si voglia memorizzare il nome. Conviene, allora,
definire una variabile di istanza nome nella classe Persona; la variabile viene
ereditata dalle sottoclassi Impiegato e Studente. Definiamo anche un metodo
getNome.
Supponiamo, inoltre, che per lo studente si voglia memorizzare il corso di laurea a cui
è iscritto e per l´impiegato lo stipendio percepito.

Il codice Java potrebbe essere il seguente:

public class Persona
{
private String nome;
public String getNome()
{
return nome;
}
.............
}

public class Studente extends Persona
{
private String corsoLaurea;
.................
}

public class Impiegato extends Persona
{
private double stipendio;
...............
}


Bocchi Cinzia
Ultimo aggiornamento: 30/10/2009
2

Possiamo creare istanze delle classi considerate con le seguenti istruzioni:

Persona p = new Persona();
Studente s = new Studente();
Impiegato i = new Impiegato();

Osservate, però, che anche le seguenti istruzioni sono lecite:

Persona p = new Studente();
Persona p = new Impiegato();

L´oggetto p può avere dunque più forme. Da qui il termine polimorfismo.
Con il termine polimorfismo, in Java, si intende la possibilità per uno stesso oggetto di
avere più forme, cioè strutture diverse.

Nel primo caso, la struttura dell´oggetto p è

p nome corsoLaurea

Nel secondo caso

p nome stipendio


Un tipico utilizzo di tale proprietà si osserva nella creazione di array contenenti
elementi di tipo diverso. Infatti, il tipo base di array deve essere unico e ciò non
permette di creare array contenenti elementi di tipo diverso. Tuttavia, questo limite
può essere superato se si sfrutta la proprietà del polimorfismo. Per esempio, possiamo
definire un array di oggetti persona e inserire in esso uno studente e un impiegato.

Persona[] array= new Persona[2];
array[0]= new Studente();
array[1]= new Impiegato();

Attenzione!
Quando si estrae un oggetto dall´array precedente occorre effettuare un .
Per esempio, se vogliamo estrarre il primo elemento dell´array dobbiamo scrivere:

Studente s= (Studente) array[0]

Analogamente per il secondo elemento

Impiegato i= (Impiegato) array[0]




Bocchi Cinzia
Ultimo aggiornamento: 30/10/2009
3
L'operatore instanceof
Un programmatore non è tenuto a conoscere esattamente il tipo effettivo degli
elementi contenuti in un array, pertanto per sapere di quale classe è istanza un certo
oggetto, possiamo utilizzare l´operatore instanceof.
L´operatore instanceof restituisce true se l´oggetto è istanza della classe specificata,
altrimenti restituisce false. Per esempio:

s instanceof Studente

restituisce true, mentre

s instanceof Impiegato

restituisce false.

Per estrarre gli oggetti dall´array possiamo quindi scrivere il seguente codice

if (array[i] instanceof Studente)
Studente s= (Studente) array[i];
else
Impiegato i= (Impiegato) array[i];
























____________________________________________________________________
Quest'opera è stata rilasciata sotto la licenza Creative Commons Attribuzione-Non commerciale 2.5 Italia.
Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-nc/2.5/it/ o
spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California,
94105, USA.