Salta ai contenuti

Ereditarieta

L’ereditarieta permette di creare una classe partendo da un’altra.

La classe piu generale contiene dati e metodi comuni. La classe piu specifica li riusa e aggiunge cio che le serve.

Esempio:

  • Persona e generale
  • Studente e una persona con una matricola

In Java si usa extends.

public class Persona {
String nome;
void saluta() {
System.out.println("Ciao, sono " + nome);
}
}
public class Studente extends Persona {
String matricola;
}

Studente eredita il campo nome e il metodo saluta.

public class Esempio {
public static void main(String[] args) {
Studente studente = new Studente();
studente.nome = "Luca";
studente.matricola = "A123";
studente.saluta();
System.out.println(studente.matricola);
}
}

Output:

Ciao, sono Luca
A123

La classe da cui parti viene spesso chiamata:

  • classe base
  • superclasse
  • classe padre

La classe che eredita viene chiamata:

  • classe derivata
  • sottoclasse
  • classe figlia

Sono parole diverse per descrivere la stessa relazione.

Una sottoclasse puo ridefinire un metodo ereditato.

public class Studente extends Persona {
String matricola;
@Override
void saluta() {
System.out.println("Ciao, sono lo studente " + nome);
}
}

@Override dice a Java e a chi legge: “sto sovrascrivendo un metodo della classe base”.

Se la classe base ha un costruttore con parametri, la sottoclasse deve chiamarlo con super.

public class Persona {
private String nome;
public Persona(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
}
public class Studente extends Persona {
private String matricola;
public Studente(String nome, String matricola) {
super(nome);
this.matricola = matricola;
}
}

super(nome) chiama il costruttore di Persona.

L’ereditarieta e utile quando una classe e davvero un tipo piu specifico di un’altra.

Studente e una Persona: ha senso.

Ma non usarla solo per “prendere codice”. A volte e meglio mettere un oggetto dentro un altro invece di ereditarlo.

Regola pratica:

se puoi dire “X e un tipo di Y”, l’ereditarieta potrebbe avere senso.

Se devi dire “X usa Y” o “X contiene Y”, probabilmente serve un’altra struttura.