La parola extends
L'ereditarieta' permette a una classe (sottoclasse) di ereditare attributi e metodi di un'altra (superclasse) con extends. Si usa quando vale la relazione «e'-un»: un Cane e' un Animale.
class Animale { protected String nome; // protected: visibile alle sottoclassi Animale(String n) { nome = n; } String verso() { return "..."; } } class Cane extends Animale { // Cane eredita nome e verso() Cane(String n) { super(n); } // super() chiama il costruttore della superclasse }
L'override
Una sottoclasse puo' riscrivere (override) un metodo ereditato per cambiarne il comportamento. Si annota con @Override.
Il polimorfismo
Il polimorfismo e' la capacita' di trattare oggetti di tipo diverso con un tipo comune. Posso mettere cani e gatti in un array di Animale: quando chiamo verso(), Java sceglie a runtime la versione giusta per ciascun oggetto.
Animale[] zoo = { new Cane("Fido"), new Gatto("Tom") };
for (Animale a : zoo)
System.out.println(a.verso()); // Bau, poi Miao: ognuno il suo!E' esattamente cio' che chiede la verifica: un array di Pagabile[] o Misurabile[] scorso in modo polimorfico, dove ogni oggetto calcola il proprio importo a modo suo.
toString, equals, instanceof
- toString() — lo si riscrive per dare una rappresentazione testuale dell'oggetto; viene usato automaticamente da println.
- equals(Object o) — per decidere quando due oggetti sono “uguali” per contenuto.
- instanceof — verifica se un oggetto e' di un certo tipo; spesso seguito da un casting.
Superclasse astratta Forma con metodo astratto area(); sottoclassi Cerchio e Quadrato. Somma le aree di un array di Forma.
Mostra soluzione
Esercizi su ereditarieta' e polimorfismo ↓