Ereditarietà e override
L’ereditarietà consente a una classe di specializzarne un’altra quando esiste una vera relazione “è un”.
1. Il concetto, spiegato da zero
L’ereditarietà consente a una classe di specializzarne un’altra quando esiste una vera relazione “è un”.
extends dichiara la sottoclasse; @Override verifica che un metodo ridefinisca correttamente il metodo ereditato. Preferisci composizione quando non esiste una relazione naturale.
2. Un esempio ragionato
Osserva l’esempio e leggi ogni istruzione nell’ordine. Prima di provarlo, fermati a prevedere cosa succederà; capire il motivo del risultato è più importante che memorizzare la sintassi.
class Animale { String verso() { return "..."; } }
class Gatto extends Animale {
@Override String verso() { return "Miao"; }
}
public class Main {
public static void main(String[] args) {
System.out.println(new Gatto().verso());
}
}Come leggere questo esempio
- Prima di eseguire, prova a prevedere il risultato dell’esempio.
- Spiega con parole tue in che modo “ereditarietà e override” risolve un problema concreto.
- Rileggi ogni riga del programma e individua i valori che vengono creati o modificati.
- Modifica un valore; confronta il comportamento e annota che cosa è cambiato.
Non creare gerarchie profonde soltanto per riutilizzare qualche riga di codice.
3. Adesso tocca a te
Obiettivo dell’esercizio: Specializza una classe Animale con override del metodo verso().
Puoi partire dall’esempio, riprodurlo e poi modificarlo. La soluzione di riferimento è disponibile sotto, ma conviene aprirla soltanto dopo un primo tentativo.
Laboratorio: metti alla prova il codice
JAVA · javaL’esempio Java è pensato per IntelliJ/JDK: il controllo guidato cerca elementi nel codice ma NON compila né esegue Java nel browser.
Output / esito del controllo
Il risultato comparirà qui.
Mostra la soluzione di riferimento
class Animale { String verso() { return "..."; } }
class Gatto extends Animale {
@Override String verso() { return "Miao"; }
}
public class Main {
public static void main(String[] args) {
System.out.println(new Gatto().verso());
}
}Confronta il tuo procedimento con quello dell’esempio. Una soluzione differente può essere altrettanto valida se produce risultati corretti.
4. Verifica e ripasso
Quiz: hai capito il concetto?
Quale delle seguenti affermazioni è corretta per questo capitolo?
extends dichiara la sottoclasse; @Override verifica che un metodo ridefinisca correttamente il metodo ereditato. Preferisci composizione quando non esiste una relazione naturale.
5. Come proseguire
Prima del capitolo successivo, prova a spiegare il concetto a un amico senza leggere il codice. Se non riesci, torna all’esempio e fai una nuova variante: imparare significa anche sperimentare.