Definire la sottoclasse che deriva dalla superclasse
Definendo nuovi metodi e/o nuove variabili, oltre ai class NomeSottoclasse extends NomeSuperclasse:
class NomeSottoclasse extends NomeSuperclasse {
Costruttori
Nuovi metodi
Nuove variabili
Nota: una classe estende sempre una sola altra classe.
Nota: se la superclasse non è indicata esplicitamente, il compilatore usa implicitamente java.lang.Object. L’ereditarietà è un paradigma che supporta l’obiettivo di riusabilità del codice.
Quando sfruttare l'ereditarietà
Si sfrutta quando si deve realizzare una classe ed è già disponibile un'altra classe che rappresenta un concetto più generale. In questi casi, la nuova classe da scrivere è una classe più specializzata, che eredita i comportamenti (metodi) della classe più generale e ne aggiunge di nuovi.
Esempio: SavingsAccount
Supponiamo di voler realizzare una classe SavingsAccount per rappresentare un conto bancario di risparmio:
- Dovrà avere un tasso annuo di interesse determinato al momento dell’apertura.
- Dovrà avere un metodo addInterest per accreditare gli interessi sul conto.
Un conto bancario di risparmio ha tutte le stesse caratteristiche di un conto bancario, più alcune altre caratteristiche che gli sono peculiari. Allora riscriviamo la classe SavingsAccount usando il meccanismo dell'ereditarietà (extends), eredita tutte le caratteristiche (campi di esemplare e metodi) di BankAccount, specifichiamo soltanto le peculiarità di SavingsAccount.
Implementazione della classe SavingsAccount
public class SavingsAccount extends BankAccount {
public SavingsAccount(double rate) {
interestRate = rate;
}
public void addInterest() {
deposit(getBalance() * interestRate / 100);
}
private double interestRate;
}
Oggetti della classe derivata SavingsAccount si usano come se fossero oggetti di BankAccount con qualche proprietà in più. La classe derivata si chiama sottoclasse, la classe da cui si deriva si chiama superclasse.
Osservazioni su SavingsAccount
Il metodo addInterest invoca getBalance e deposit invece che usare direttamente il campo balance. Questo perché il campo balance è definito come private in BankAccount, mentre addInterest è definito in SavingsAccount e non ha accesso a balance.
La superclasse universale Object
In Java, ogni classe che non deriva da nessun’altra deriva implicitamente dalla superclasse universale del linguaggio, ovvero Object.
-
Informatica
-
Informatica I - come realizzare una classe in java
-
Informatica I - la conversione da classe ad interfaccia in java
-
Informatica