
Gerarchia ed Ereditarietà: come una famiglia… ma di classi
Pensa alla gerarchia in Java come a un albero genealogico.
Se Persona è il genitore, Studente ed Insegnante sono i figli. Entrambi ereditano caratteristiche generiche (nome, età) ma aggiungono comportamenti propri.
È come nel mondo reale: tutti gli esseri umani hanno un cuore (proprietà comune), ma solo alcuni sanno programmare in Java (proprietà specifica 😅).
Esempio Java
class Persona {
String nome;
int eta;
void saluta() {
System.out.println("Ciao, sono " + nome);
}
}
class Studente extends Persona {
void studia() {
System.out.println("Sto studiando Java!");
}
}
Implementazione di un’interfaccia: una promessa da mantenere
Un’interfaccia è come un contratto: dice cosa devi fare, ma non come.
È come il foglio delle consegne di un corriere: lui può scegliere il mezzo (motorino, bici, razzo?), l’importante è che ti porti il pacco.
Esempio Java
interface Guidabile {
void guida();
}
class Auto implements Guidabile {
@Override
public void guida() {
System.out.println("Sto guidando un'auto!");
}
}
Overload: lo stesso nome, più modi per usarlo
L’overload è quando hai più metodi con lo stesso nome, ma con parametri diversi, cambia la firma del metodo.
È come dire “aprire una porta”: puoi aprirla con una chiave, con un badge, con il riconoscimento facciale… il risultato è lo stesso, il modo cambia.
Esempio Java
class Porta {
void apri() {
System.out.println("Apro la porta normalmente.");
}
void apri(String chiave) {
System.out.println("Apro la porta con la chiave: " + chiave);
}
void apri(int codice) {
System.out.println("Apro la porta con codice: " + codice);
}
}
Override: riscrivere un metodo ereditato
L’override è quando una classe figlia riscrive un metodo ereditato dal genitore per cambiarne il comportamento.
È come quando prendi una ricetta di famiglia e la modifichi per farla “a modo tuo”.
Esempio Java
class Animale {
void verso() {
System.out.println("Un animale fa un verso generico.");
}
}
class Cane extends Animale {
@Override
void verso() {
System.out.println("Il cane abbaia: Bau!");
}
}
Conclusione
Capire gerarchie, ereditarietà, interfacce, overload e override significa capire il cuore dell’OOP in Java.
Non sono concetti astratti: li usiamo continuamente per modellare il mondo reale all’interno dei programmi.

