Ereditarietà
Facciamo una cosa alla volta
Consiste nel fare ereditare oggetti, attributi, metodi di una classe a un'altra determinata classe.
Vantaggi:
- Riutilizzo del codice
- Sviluppo incrementale di programmi
Termini da tenere a mente:
- superclasse (la classe più generale)
- sottoclasse (la classe più specializzata)
Un esempio pratico per capire meglio la distinzione tra superclasse e sottoclasse è il seguente: immaginiamo di avere la classe Persona, la classe Studente e la classe Professore. Visto che studenti e professori sono persone, allora si dice che Studente e Professore sono sottoclassi di Persona; analogamente Persona è la superclasse poiché nel nostro esempio non ci sono classi più generali che la comprendono.
In termini tecnici:
- la sottoclasse eredita dalla superclasse i membri preesistenti
- la sottoclasse estende la superclasse con i nuovi membri
Per estendere una classe ci serviamo della parola chiave "extends" messa in questo modo:
- public class nome_sottoclasse extends nome_superclasse {...}
Un'altra parola chiave da memorizzare è "super": viene tipicamente usata per accedere ai metodi della superclasse che sono stati sovrascritti nella sottoclasse e per accedere agli attributi della superclasse. La sintassi è semplice:
- super.nome_metodo( );
- super(nome_attributi);
Classe Persona (superclasse)
public class Persona { public String nome;
public String indirizzo;
public Persona(String nome, String indirizzo){
this.nome = nome;
this.indirizzo = indirizzo;
}
public String getNome(){
return nome;
}
public String getIndirizzo(){
return indirizzo;
}
public void Visualizza(){
System.out.println("NOME: " + nome);
System.out.println("INDIRIZZO: " + indirizzo);
}
}
Classe Professore (sottoclasse)
public class Professore extends Persona {
public String ruolo;
public int stipendio;
public String corsiAffidati;
public Professore(String nome, String indirizzo, String ruolo){
super(nome,indirizzo);
this.ruolo = ruolo;
this.corsiAffidati = "";
}
public void setStipendio(int stipendio){
this.stipendio = stipendio;
}
public void aumentaStipendio(int aumento){
this.stipendio += aumento;
}
public void aggiungiCorso(String corso){
corsiAffidati += corso + "\n";
}
public void Visualizza(){
super.Visualizza();
System.out.println("RUOLO: " + ruolo);
System.out.println("STIPENDIO: " + stipendio);
System.out.println("CORSI AFFIDATI: " + corsiAffidati);
}
}
