Classe Astratte, caratteristiche ed esempi in Java
4 marzo 2014  //  By:   //  Java  //  No Comment   //   1082 Views

Frequentemente accade che una classe base facente parte di una gerarchia di classi non possa fornire l’implementazione di alcuni metodi perché a quel livello non esiste nessuna implementazione significativa. Tali metodi devono essere comunque definiti nella classe base perché permettono di trattare gli oggetti definiti nelle sottoclassi in modo uniforme sfruttando il polimorfismo.

Pensiamo a una gerarchia di classi per gestire i veicoli motorizzati (automobili, camion, moto). Probabilmente implementeremo una classe Veicolo che rappresenta la radice della gerarchia, le sottoclassi provvederanno a rappresentare gli specifici veicoli (automobile, camion, furgonati , moto ecc.).

La classe Veicolo dovrebbe prevedere tra gli altri metodi un metodo consumo() che dice il consumo in litri del veicolo per i Km percorsi. Tale metodo sarà ridefinito da ogni sottoclasse. Definendo tale metodo nella classe base garantiamo che potrà essere invocato in maniera uniforme da tutti gli oggetti della gerarchia rappresentanti i vati tipi di veicoli.

La classe base che tipo di implementazione dovrebbe fornire nel metodo consumo()? Siccome che la classe base Veicolo non rappresenta nessun veicolo specifico non può fornire nessun tipo di implementazione per il metodo, se il metodo non ritorna nessun valore (void) allora la classe base potrebbe semplicemente implementare un metodo vuoto, ma se il metodo ritorna un valore? Che valore dovrebbe ritornare? Inoltre anche il fatto di implementare un metodo vuoto non è una soluzione soddisfacente in quanto nasconde il fatto che la classe Veicolo non è una classe concreta cioè gli oggetti di tale classe non possono essere usati direttamente.

Per risolvere tale problematica Java permette di definire classi astratte (abstract classes). Una classe astratta è come una classe normale cioè concreta con però al suo interno uno o più metodi senza implementazione, un metodo così definito è chiamato metodo astratto per il quale è definita solo l’intestazione. Per definire classi e metodi astratti basta utilizzare il modificatore abstract e terminare l’intestazione dei metodi con un punto e virgola.

Caratteristiche di una classe astratta

  • Una classe con un metodo astratto deve essere dichiarata astratta.
  • Una classe astratta non può essere istanziata.
  • Una sottoclasse di una classe astratta può essere istanziata solo se implementa tutti i metodi astratti della sottoclasse.
  • Se una sottoclasse di una classe astratta NON implementa tutti i metodi astratti che eredita è essa stessa astratta e deve essere esplicitamente dichiarata astratta.
  • Metodi static o private non possono essere astratti (tali metodi così definiti non sarebbero ereditati dalle sottoclassi e quindi non sarebbero mai implementati).

Detto ciò tutte le altre caratteristiche di una classe astratta sono uguali a quelle di una classe concreta.

About the Author :

BI CONSULTING. Studente di Ingegneria Informatica, Sistemista Linux e appassionato di tutto ciò che sia tecnologico ma soprattutto Open Source. Distro: Debian e Arch LInux. Smartphone: Nexus / Lg G2 Buona Lettura  Visualizza il profilo su Linkedln

Leave a reply