Ereditarietà.


Java Sun

Earthweb
(ex Gamelan)

Jars

Java Boutique

JavaWorld

PIP






  JSem: 3.1

   L'ereditarietà consente la creazione di classificazioni gerarchiche. Una classe che viene ereditata è denominata superclasse, mentre la classe derivata, che eredita, viene denominata subclasse o sottoclasse.
Ogni classe (tranne Object) ha una superclasse, se la superclasse non è esplicitamente dichiarata, allora è quella di default, cioè Object. Quindi tutte le classi derivano, direttamente o indirettamente, da Object.
  La sintassi generale di una dichiarazione class con eredità è:

class B extends A{
//corpo della classe B
	}
La sottoclasse B estende la superclasse A ereditandone tutti i membri (variabili e metodi); in più B avrà i propri membri specifici.

Esempio:
class Intero{

int x;

//costruttore
Intero(int a){
	x = a;
	}
//metodo per 2
public void PerDue(){
System.out.println("Per due: " + (x*2));
	}
}

class Coppia extends Intero{

int y;

//costruttore
Coppia(int x, int b){
	super(x);
	y = b;
	}
//metodo somma
public void Somma(){
System.out.println("Somma: " +(x+y));
	}
}

Vediamo queste classi all'opera:
class Ered{

public static void main(String[] args){

Intero xI = new Intero(10);
Coppia C = new Coppia(4,5);

/*la superclasse è una classe a se stante*/
xI.PerDue();
/*la sottoclasse ha accesso a tutti i membri 
pubblici della sua superclasse*/
System.out.println("Prima coordinata: " + C.x);
C.PerDue();
/*In più la sottoclasse ha i suoi propri metodi*/
C.Somma();
	}
}

Commentiamo questo codice. Abbiamo aggiunto alla classe Intero il metodo PerDue(). Poi abbiamo esteso la classe Intero con la classe Coppia:
class Coppia extends Intero{
per questo abbiamo aggiunto una variabile di istanza (int y), siccome Coppia estende Intero, Coppia contiene la variabile di istanza (int x) della sua superclasse.
Il costruttore ha una forma un pò strana perchè usa la parola chiave super. Vedremo più avanti la parola chiave super più in dettaglio, per il momento ci basta sapere che super si riferisce alla superclasse, quindi qui super(x); significa che l'x è quello della superclasse Intero; questo uso di super è necessario nei costruttori di classi derivate (tali costruttori devono "estendere" quelli della superclasse). Se provate a definire il costruttore come:
Coppia(int a, int b){
x = a;
y = b;
	}

otterete un errore in fase di compilazione ("No constructor matching Intero() found in class Intero.")
Dopodichè, Coppia contiene un suo metodo, Somma(). Osservare che in questo metodo, si usa direttamente la variabile di istanza x della superclasse, questo perchè (a parte per i costruttori): una sottoclasse contiene i membri pubblici della sua superclasse.
Abbiamo sottolineato pubblici perchè una sottoclasse non ha accesso diretto ai membri dichiarati private della sua superclasse. Potete verificare ciò, rimpiazzando nell'esempio precedente la classe Intero con una classe InteroP nella quale x è private:
private int x;
La classe Ered mette in gioco le due classi Intero e Coppia. Come si può vedere, ancora una volta, la sottoclasse ha accesso diretto ai membri pubblici (la variabile di istanza x tramite C.x; il metodo PerDue()) della sua superclasse.



 next		content		previous