18 Classi Astratte e Classi Estese

Credo che le classi astratte non siano uno degli argomenti base da sapere per programmare, cioè se siete all’inizio e state imparando difficilmente le userete nei vostri primi programmi. In questo articolo ve le presenterò brevemente ma le vedremo meglio, con anche un esempio pratico, un po’ più avanti.

Partiamo con un po’ di teoria sull’argomento e dopo vedremo la sintassi di tutto.

Cosa sono le Classi Astratte?
Sono delle classi delle quali non posso istanziare alcuna variabile. Al loro interno contengono sia metodi già implementati che metodi astratti che verranno implementati successivamente dalle classi figlie della classe astratta.

Cosa sono le Classi Figlie?
Sono particolari tipi di classi che estendono (con l’apposito comando extends) altre classi.
Una classe può estendere qualsiasi altra classe!
Se però la classe che viene estesa contiente metodi astratti allora la classe che la estenderà dovrà occuparsi di implementare tali metodi (a meno che non sia a sua volta una classe astratta ma non pensiamoci o iniziamo a perderci).
La classe figlia erediterà tutti i metodi della classe estesa, quindi se creiamo un’istanza della classe figlia potremo da essa invocare sia i metodi appartenenti solo alla classe figlia che metodi appartenenti alla classe padre.

Scriviamo un po’ di codice per chiarire le idee.
Apriamo un nuovo progetto e creiamo due nuove classi:

Classe Padre

public abstract class Padre{
    public void metodo_implementato()
    {
        //questo metodo fa qualcosa
    }
    //metodo astratto che dovrà essere implementato 
    //dalle classi figlie
    public abstract void metodo_astratto();
}

Classe Figlio

public class Figlio extends Padre{
    @Override //questo simbolo indica che sovrascriviamo il metodo del padre
    public void metodo_astratto() {
        //implemento il metodo astratto del padre
    }
}

Adesso nel main possiamo scrivere le seguenti righe di codice:

Figlio f=new Figlio();//non potremo fare lo stesso con Padre perchè
		//è una classe astratta
f.metodo_astratto();
f.metodo_implementato();

Metodi Sovrascritti
Se nella classe figlia scrivessimo il metodo “metodo_implementato” con stesso nome e stessi parametri in ingresso (e stesso valore di ritorno qualora ci fosse stato) di quello del padre staremmo effettuando una sovrascrittura del metodo del padre.
In questo caso se poi nel main scriviamo f.metodo_implementato; invochiamo il metodo di Figlio e non quello di Padre.

Una Precisazione sui Metodi Astratti
State bene attenti perchè soltanto una classe astratta può contenere metodi astratti!

Se avete ancora qualche dubbio vi cosiglio di fare diversi esperimenti, ad esempio creando più metodi e a ciascuno di essi far stampare cose diverse e poi provare ad invocarli sul main.
Se, dopo aver provato questi esperimenti, avete ancora qualche dubbio non esitate a scrivermi!
Alla prossima! In cui vedremo l’ultimo argomento, per ora, correlato alle classi!

Please follow and like us: