Ereditarietà in Java



Nel linguaggio Java ci troviamo sovente di fronte alla modellazione di un mondo per il quale è sconveniente scrivere una classe per ogni oggetto che contenga tutte le caratteristiche, in quanto gli oggetti possono avere caratteristiche comuni o possono rispecchiare un naturale ordine gerarchico.
Il concetto di ereditarietà ci viene in aiuto in questo senso.

Ma cos’è l’ ereditarietà?

L’ereditarietà è il meccanismo tramite il quale un oggetto è in una relazione logica con un altro nel tipo “è un”.
Ad esempio, se modelliamo la classe persona  e la classe studente di Ingengeria, vien naturale sostenere “lo studente di ingengneria è una persona” e quindi un oggetto studente di ingengneria ha tutte le caratteristiche della persona
(notate che non è vero il contrario, non tutte le persone  son studenti di Ingegneria).

La classe Persona è detta superclasse cioè  la classe più “generale” (quella preesistente);

Mentre la classe studente di ingegneria è detta sottoclasse cioè  la nuova classe più “specializzata” (oggetti più ricchi).

La sintassi per estendere una (super)classe ereditandone struttura e funzionalità è:

public class <nuova_(sotto)classe>
extends <vecchia_(super)classe> {

<nuove_variabili_istanza>

<nuovi_metodi>
}

Un esempio: la classe Persona

public class Persona {
String nome;
String città_nascita;

public Persona() {
this("John Doe","ignota");
}

public Persona(String nome) {
this(nome,"ignoto");
}

public Persona(String nome, String citta_nascita) {
this.nome = nome;
this.citta_nascita = citta_nascita;
}

public String getNome() {
return nome;
}

public String getCitta_nascita() {
return indirizzo;
}

public void visualizza() {
System.out.println("Nome: " + nome + "ncitta_nascita: " + citta_nascita);
}

public boolean omonimo(Persona p) {
return this.nome.equalsIgnoreCase(p.nome);
}
...
}

La sottoclasse Studente
Vogliamo definire una classe Studente, che rappresenti  gli studenti iscritti ad un corso di Ingegneria.
Ogni studente è descritto dal nome, dall’indirizzo, dal numero di matricola e dal piano di studio.
Uno Studente è un tipo particolare di  Persona.

L’ereditarietà ci consente di definire questa classe senza ripetere la descrizione di tutte le variabili e i metodi di Persona, ma procedendo invece in modo incrementale:

public class Studente extends Persona {
// Studente eredita variabili e metodi da Persona

int matricola;        // Nuova variabile istanza
String pianoDiStudio; // Nuova variabile istanza

// Nuova variabile statica (di classe)
static int nextMatricola = 1;

// Costruttore
public Studente(String nome, String citta_nascita) {
this.nome = nome;
this.citta_nascita = citta_nascita;
this.matricola = nextMatricola++;
this.pianoDiStudio = "";
}

// Nuovo metodo
public String getPdS() {
return pianoDiStudio;
}

// Nuovo metodo
public void modificaPdS(String nuovoPdS) {
pianoDiStudio += nuovoPdS + "n";
}
...
}

La parola chiave extends significa che

Studente è una sottoclasse o classe derivata di Persona.

Persona è una superclasse o classe genitrice di Studente

Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
Pinterest