|
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. 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:
Vediamo queste classi all'opera:
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