vuoi
o PayPal
tutte le volte che vuoi
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 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, sulquale non abbiamo controllo. SavingsAccount inPossiamo però sovrascrivere deposit, ridefinendolo in più aggiungiamo una costante diclasse FEE, che contenga l'importo del costo fisso da addebitare.SavingsAccount, depositQuando viene invocato deposit con un oggetto di tipo viene invocato il metododefinito BankAccount. BankAccount.in SavingsAccount e non quello definito in Nulla cambia per oggetti di tipoCampi di esemplare di una sottoclasseQuando definiamo una sottoclasse, possono verificarsi due diverse situazioni per quanto riguarda i suoicampi 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, BankAccount)ereditato danon è possibile sovrascrivereInvece 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 super 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.
ESEMPIO:
public class SavingsAccount extends BankAccount {
public SavingsAccount(double initialBalance, double rate) {
super(initialBalance);
interestRate = rate;
}
...
}