Metodi di una sottoclasse: sovrascrivere metodi
Quando definiamo una sottoclasse, possono verificarsi tre diverse situazioni per quanto riguarda i suoi metodi:
- Viene definito un metodo nella sottoclasse che nella superclasse non esisteva.
- Viene ereditato un metodo della superclasse dalla sottoclasse.
- Viene sovrascritto un metodo della superclasse nella sottoclasse.
La possibilità di sovrascrivere (override) un metodo della superclasse è una delle caratteristiche più potenti del OOP (Object Oriented Programming). Per fare ciò bisogna definire nella sottoclasse un metodo con la stessa firma di quello definito nella superclasse. Tale metodo prevale su quello della superclasse quando viene invocato con un oggetto della sottoclasse.
Esempio
Vogliamo modificare la classe SavingsAccount in modo che ogni operazione di versamento abbia un costo (fisso) FEE, che viene automaticamente addebitato sul conto. I versamenti nei conti di tipo SavingsAccount si fanno però invocando il metodo deposit di BankAccount, sul quale non abbiamo controllo. Possiamo però sovrascrivere deposit, ridefinendolo. In più aggiungiamo una costante di classe FEE, che contenga l'importo del costo fisso da addebitare. Quando viene invocato deposit con un oggetto di tipo SavingsAccount, viene invocato il metodo definito in SavingsAccount e non quello definito in BankAccount. Nulla cambia per oggetti di tipo BankAccount.
Campi di esemplare di una sottoclasse
Quando definiamo una sottoclasse, possono verificarsi due diverse situazioni per quanto riguarda i suoi campi di esemplare:
- Nella sottoclasse viene definito un campo di esemplare che nella superclasse non esisteva.
- Un campo della superclasse viene ereditato dalla sottoclasse. (Ad esempio il campo balance di SavingsAccount, ereditato da BankAccount).
Non è possibile sovrascrivere un campo della superclasse nella sottoclasse. Cosa succede se nella sottoclasse viene definito un campo omonimo di uno della superclasse? È un’operazione lecita, ma molto sconsigliabile. Si creano due campi di esemplare omonimi ma distinti, e in particolare il nuovo campo di esemplare mette in ombra il suo omonimo della superclasse.
Costruttori di una sottoclasse
Siccome i campi di esemplare privati della superclasse non sono accessibili dalla sottoclasse, per inizializzare questi campi di esemplare da un costruttore della sottoclasse bisogna invocare un costruttore della superclasse, usando la parola chiave super seguita da parentesi tonde ed eventuali parametri espliciti del costruttore. L'invocazione del costruttore della superclasse deve essere il primo enunciato del costruttore della sottoclasse.
-
Informatica
-
Informatica - esercitazione
-
Appunti Informatica
-
Informatica I - come realizzare una classe in java