Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Classi astratte
Definizione di classe astratta
Una classe che contiene almeno un metodo astratto detta classe astratta. Una classe astratta pu contenere variabili di istanza e metodi non astratti. Una classe pu essere dichiarata astratta anche se non ha metodi astratti.
Per dichiarare una classe astratta si utilizza la sintassi seguente: abstract class <nome classe> Un metodo astratto un metodo per il quale non stata fornita alcuna implementazione; per esempio: public abstract metodoAstratto(); Di conseguenza, una classe astratta ha almeno un metodo privo di implementazione, anche se ci non strettamente necessario.
P ersona
Im pi eg ato
S tud ente
public class Persona { private String nome; public String getNome() { return nome; } .. }
1
Tratto da C. S. Horstmann, G. Cornell, Java2 I fondamenti, sesta edizione, Mc Graw Hill, 2003
public class Studente extends Persona { private String corsoLaurea; .. } public class Impiegato extends Persona { private double stipendio; . } Supponiamo di voler definire un metodo getDescrizione che restituisca una breve descrizione della persona. In particolare si vuole ottenere: per un impiegato, la visualizzazione dello stipendio; per uno studente, il corso di laurea. E evidente che la classe Persona non ha informazioni sullo stipendio dellimpiegato e sul corso di laurea a cui lo studente iscritto. Tali informazioni sono contenute allinterno delle rispettive sottoclassi. Ci troviamo quindi di fronte a 2 possibilit: 1. definire il metodo solo allinterno delle sottoclassi; 2. definire il metodo come astratto, cio senza specificare il codice, nella superclasse e implementare il metodo in ciascuna sottoclasse. Nel primo caso il codice diventa public class Persona { private String nome; public String getNome() { return nome; } } public class Studente extends Persona { private String corsoLaurea; public String getDescrizione() { return Lo studente frequenta +corsoLaurea; } } public class Impiegato extends Persona { private double stipendio; public String getDescrizione() {
Bocchi Cinzia Ultimo aggiornamento: 30/09/2011
3
return Limpiegato ha uno stipendio pari a +stipendio;
} }
Nel seguito vedremo che la seconda possibilit pi flessibile della prima e quindi preferibile. Tuttavia, se scegliamo la seconda possibilit, il metodo getDescrizione della superclasse sar astratto e, di conseguenza, dovr essere definita come astratta anche la classe Persona. public abstract class Persona { private String nome; public String getNome() { return nome; } public abstract String getDescrizione(); } public class Studente extends Persona { private String corsoLaurea; public String getDescrizione() { return Lo studente frequenta +corsoLaurea; } } public class Impiegato extends Persona { private double stipendio; public String getDescrizione() { return Limpiegato ha uno stipendio pari a +stipendio; } } Il metodo astratto getDescrizione funge da segnaposto per i metodi implementati nelle sottoclassi: il codice del metodo pu cambiare da sottoclasse a sottoclasse; la firma del metodo (nome, tipo restituito, specificatori di accesso, parametri) rimane la stessa.
___________________________________________________________________
Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.