






Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti del corso di ALGORITMI E PROGRAMMAZIONE del prof. Fabio Sartori. Ereditarietà
Tipologia: Appunti
1 / 11
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!







L’ereditarietà è uno dei concetti base della programmazione ad oggetti. L’ereditarietà è la possibilità di ridefinire un codice incapsulato all’interno di un metodo per variarne l’implementazione del comportamento. Concetto di base:
Nel mondo delle classi non abbiamo concretezza: abbiamo concretezza nel momento in cui istanziamo un oggetto. Facendo ciò, creiamo delle entità che agiscono nel mondo reale. Possiamo quindi creare anche delle architetture di classi necessarie per rappresentare un dominio da un punto di vista concettuale ma avremo istanziazione solo su una di queste classi. Riusciamo quindi a costruire un legame semantico con la realtà tramite la doppie via mondo reale → superclassi. PERCHÉ L’EREDITARIETÀ Economia
Una classe può ereditare da più superclassi (ereditarietà multipla). In questo caso la sottoclasse eredita le caratteristiche di entrambe le superclassi. Esempio:
La parola chiave utilizzata per l’ereditarietà è "extends". La sintassi utilizzata in Java per esplicitare che una classe deriva da un’altra è la seguente: public class ClassePadre { ... } public class ClasseFiglia extends ClassePadre { ... } In questo modo, tutto ciò che è stato definito nella classe padre verrà incluso nella definizione della classe figlia, venendo richiamato a run time nella creazione degli oggetti. Si osservi che tutto ciò viene fatto a run-time (non lo si vede esplicitamente). ESEMPIO Proviamo ad implementare il seguente diagramma di classi
Se cancellassi anche il toString della classe persona e ricompilassi il codice all’interno della cartella sorgente, il codice funzionerebbe nuovamente. Da dove deriva quindi il toString? Se non definissi il toString all’interno della classe, verrebbe stampato l’indirizzo di memoria. La stampa risulterebbe Persona@4617c Studente@7a81197d Non riesco a stampare lo stato perché non l’ho definito io ma posso stamparne l’identità. L’insieme alfanumerico di numeri dopo @ (hashCode) deriva dalla classe object di toString(). Infatti ogni volta che definisco una classe in Java, richiamo una serie di metodi definiti nella classe Object(), che può essere considerata come la classe root della gerarchia delle classi. Ogni volta che scriviamo una classe in java implicitamente stiamo estendendo una classe object, quindi implicitamente richiamiamo una serie di metodi che sono naturalmente definiti nella classe object, come l’equals(), il toString()... Quando implementiamo nelle nostre classi il toString() senza saperlo stavamo facendo un overriding e di conseguenza quando poi lo richiamiamo viene invocato quello che abbiamo riscritto. Se invece non ridefiniamo il toString() e lo richiamiamo, automaticamente si usa il toString() della classe object che stampa l’identità dell’oggetto. Un’altra cosa che ereditiamo dalla classe object è il costruttore di default, per questo quando definisco un costruttore questo viene eliminato, poichè viene sovrascritto. Con la keyword super prima di toString (super.toString()) stamperei lo stato della superclasse. LA CLASSE OBJECT In Java qualsiasi classe specializza la classe Object. Fino ad ora, non sapendolo, abbiamo scritto classi che sono specializzazione della classe Object
Se modifichiamo il main dell’esercizio della slide 12 nel modo seguente: ... Non avremo errori di compilazione:
Cosa succede per i costruttori che accettano in ingresso parametri? Regola da rispettare: ogni classe inizializza i propri attributi!