

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 su ereditarietà del programma del quinto anno di liceo scientifico scienze applicate Bramante.
Tipologia: Appunti
1 / 2
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!


La dichiarazione di una sottoclasse ha la forma :
Modificatori class NomeClasse extends NomeSuperClasse { //attributi //metodi }
Se per una classe non è specificato un modificatore di accesso, può essere usata o estesa solo all'interno dello stesso package. Se si specifica il modificatore public la classe può essere usata o estesa indipendentemente dal package. Se si specifica il modificatore final, la classe non può essere estesa e quindi non è possibile definire sue sottoclassi.
I modificatori di accesso package (di default) e protected si differenziano perché attributi e metodi con accesso package sono visibili a tutte le classi dello stesso package ma non alle sottoclassi, mentre quelli con accesso protected sono visibili a tutte le classi dello stesso package e anche alle sottoclassi.
VISIBILITA’ Package: visibile a a tutte le classi dello stesso package, ma non alle sottoclassi Public: visibile a A tutte le classi di tutti i package Private: visibile solo all'interno della classe Protected: visibile a tutte le classi dello stesso package, anche alle sottoclassi.
Gli attributi solitamente sono dichiarati privati, se la sottoclasse deve poter modificare gli attributi conviene rendere disponibile con accesso protected un metodo di modifica.
In pratica una sottoclasse eredita tutti gli attributi e i metodi della superclasse dichiarati public o protected.
Se una classe è dichiarata final non può essere estesa. Se la classe non è dichiarata final ma lo sono alcuni metodi, la classe può essere estesa ma i metodi final non possono essere sovrascritti.
L'ordine in cui sono scritti i modificatori è irrilevante, ma di solito si scrivono prima i modificatori di accesso, static e poi final.
Nella sottoclasse è possibile aggiungere nuovi attributi, nuovi metodi o metodi polimorfi.
Gli oggetti della sottoclasse possono usare i metodi della superclasse. Un oggetto di tipo derivato può essere usato ovunque sia richiesto un supertipo (esempio se ho una classe Persona ed una classe derivata Studente, un oggetto di tipo Studente può essere utilizzato sia come Studente che come Persona. In pratica si può usare un tipo Studente ogni volta che è richiesto il tipo Persona). Non è possibile fare il casting tra classi che non appartengono alla stessa gerarchia.
Usando come riferimento una variabile del tipo della superclasse, si possono richiamare solo i metodi definiti nella superclasse e non quelli definiti nella sottoclasse. Se si deve usare il codice della sottoclasse, occorre fare un casting per convertire la variabile riferimento al tipo della sottoclasse.
In una sottoclasse si può definire un metodo con lo stesso nome, stesso numero e tipo di parametri della superclasse (overriding); questo serve per sovrascrivere il metodo, cambiandone il comportamento all'interno della sottoclasse. È possibile ridefinire un metodo anche in modo che non faccia nulla, solo per togliere una funzionalità alla classe.
Quando si ridefinisce un metodo i parametri e il tipo di ritorno devono coincidere; si possono cambiare i nomi dei parametri ma non il numero, l'ordine e il tipo.
I metodi ridefiniti posso avere lo stesso modificatore di accesso o uno più ampio (quindi non si può sovrascrivere un metodo pubblico per renderlo privato).
SUPER Super è un riferimento a un'istanza della superclasse della classe in cui viene usata; può essere usata in tutti i metodi non statici della superclasse e permette di richiamare i metodi della superclasse che sono stati ridefiniti nella sottoclasse.
super.metodo(parametri);
Per eseguire la precedente chiamata a un metodo, viene cercato nella gerarchia delle classi la prima superclasse contenente il metodo richiesto. Di solito questa chiamata viene effettuata all'interno di un metodo della sottoclasse, insieme a della nuove istruzioni, per estendere funzionalità al metodo riscritto.
super();
La chiamata super() indica una chiamata al costruttore della superclasse. Il costruttore della sottoclasse deve sempre, per prima cosa, richiamare un costruttore della superclasse in modo che costruisca opportunamente la parte di oggetto controllata dalla superclasse.
Costruttore(....){ super(); //altre istruzioni }
La chiamata al costruttore della superclasse deve essere la prima istruzione del costruttore della sottoclasse. Il costruttore della superclasse può essere richiamato solo dal costruttore della sottoclasse.
Se il costruttore della sottoclasse non richiama esplicitamente un costruttore della superclasse, per prima cosa viene chiamato automaticamente il costruttore predefinito della superclasse, cioè quello senza parametri (super()); se la superclasse non ha un costruttore senza parametri il compilatore genera un errore.