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.