:
SCOPO
Definire la Sottoclasse che deriva dalla Superclasse
SINTASSI:
Definendo nuovi metodi e/o nuove variabili, oltre ai class NomeSottoclasse extends NomeSuperclasse
{ costruttori
suoi 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 riusabilità del codice.
L’ereditarietà è un paradigma che supporta l’obiettivo di
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.
: SavingsAccount
ESEMPIO
Supponiamo di voler realizzare una classe SavingsAccount per rappresentare un conto bancario di
risparmio: di interesse
dovrà avere un tasso annuo 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
Dichiariamo che SavingsAccount è una classe derivata da BankAccount quindi
caratteristiche (campi di esemplare e metodi) di BankAccount, specifichiamo soltanto le peculiarità di
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
sottoclasse, superclasse.
proprietà in più. La classe derivata si chiama la classe da cui si deriva si chiama
Osservazioni su SavingsAccount: addInterest getBalance
Il metodo invoca e
public class SavingsAccount extends BankAccount deposit invece che usare direttamente il campo
{ ...
public void addInterest() balance. Questo perché il campo balance è
{ deposit(getBalance() * interestRate / 100); } BankAccount,
definito come private in mentre
...
} addInterest SavingsAccount
è definito in 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
-
Informatica
-
Informatica I - come realizzare una classe in java
-
Informatica I - la conversione da classe ad interfaccia in java
-
Informatica