Ereditarietà Sebbene l`ereditarietà sia un argomento semplice da

Ereditarietà
Sebbene l’ereditarietà sia un argomento semplice da comprendere, non è sempre
utilizzata in maniera corretta. E’ la caratteristica della programmazione ad oggetti che
permette di creare nuove classi a partire da una classe già esistente (classe base). Come
risultato avremo la possibilità di ereditare codice già scritto (e magari già testato), e
quindi gestire insiemi di classi collettivamente, giacché accomunate da caratteristiche
comuni. Le regole per gestire correttamente l’ereditarietà sono semplici e chiare.
Mezzi di
trasporto
…….
……..
……..
…..
……
Veicoli a motore
…….
……..
……..
…..
……
Mezzi non a motore
…….
……..
……..
…..
……
La classe che è stata ereditata da un’ altra usando l’ ereditarietà prende il nome di sottoclasse, la
classe generatrice di una sottoclasse prende il nome di superclasse.
Esistono due tipi di ereditarietà :
 per estensione quando la sottoclasse aggiunge nuovi attributi e metodi che si sommano a
quelli ereditati.
 per ridefinizione quando la sottoclasse ridefinisce i metodi ereditati . In pratica viene
data un’ implementazione diversa di un metodo. Si crea un nuovo metodo che ha lo stesso
nome del metodo ereditato da una sopraclasse , ma che ha una funzionalità diversa..
Quando una sottoclasse ridefinisce un metodo si dice che lo sovrascrive (overriding)
La parola chiave extends
Consideriamo le seguenti classi:
public class Libro {
public int numeroPagine;
public int prezzo;
public String autore;
public String editore;
...
}
public class LibroSuJava{
public int numeroPagine;
public int prezzo;
public String autore;
public String editore;
public final String ARGOMENTO_TRATTATO = "Java";
...
}
Notiamo che le classi Libro e LibroSuJava rappresentano due concetti in relazione
tra loro e quindi dichiarano campi in comune. In effetti, l’ereditarietà permetterà di
mettere in relazione di estensione le due classi con la seguente sintassi:
public class LibroSuJava extends Libro {
public final String ARGOMENTO_TRATTATO = "Java";
...
}
In questo modo la classe LibroSuJava erediterà tutti i campi pubblici della classe che
estende. Quindi, anche se non sono state codificate esplicitamente, nella classe
LibroSuJava sono presenti anche le variabili pubbliche numeroPagine, prezzo,
autore ed editore definite nella classe Libro.
In particolare diremo che LibroSuJava è sottoclasse di Libro, e Libro è
superclasse di LibroSuJava.
Ereditarietà multipla
In Java esiste la cosiddetta “ereditarietà multipla” . Questa
permette ad una classe di estendere più classi contemporaneamente . Per esempio, una certa
persona potrebbe estendere programmatore e marito. Ma l’ereditarietà multipla è spesso causa di
problemi implementativi, cui il programmatore deve poi rimediare, per questo è preferibile non
utilizzarla.