Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Ereditarietà - liceo scientifico, Appunti di Informatica

Appunti su ereditarietà del programma del quinto anno di liceo scientifico scienze applicate Bramante.

Tipologia: Appunti

2020/2021

Caricato il 19/09/2022

Alessia.Cerasino
Alessia.Cerasino 🇮🇹

4

(8)

39 documenti

1 / 2

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
L'EREDITARIETÀ
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 p 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.
OVERRIDING
pf2

Anteprima parziale del testo

Scarica Ereditarietà - liceo scientifico e più Appunti in PDF di Informatica solo su Docsity!

L'EREDITARIETÀ

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.

OVERRIDING

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.