Java/Modificatori di accesso
I modificatori
[modifica | modifica sorgente]I modificatori sono parole riservate che forniscono al compilatore informazioni sulla natura del codice, dei dati e delle Classi contenuti nei file sorgenti. Fra tutti i modificatori alcuni possono essere raggruppati in una singola categoria che ne specifica il comportamento, essi sono i modificatori di accesso
:
private
protected
public
In assenza di questi tre, un elemento di programma viene considerato package-local
o friend
(si dice che assume la visibilità di default).
Le visibilità possibili sono:
modificatore di visibilità | effetto |
public | visibile da qualsiasi parte del programma |
private | visibile solo dall'interno della classe stessa |
protected | visibile solo dalle classi dello stesso package e dalle sottoclassi |
default | visibile dallo stesso package e dalle sottoclassi se sono nello stesso package. È la visibilità assegnata di default se non viene specificato nulla. |
I modificatori di accesso
[modifica | modifica sorgente]I modificatori di accesso regolano la possibilità di accedere ad una Classe, ad un metodo o ad un attributo, da parte di una Classe o di un metodo, esterno od interno alla Classe stessa. In genere, solo le variabili di Classe, ma non è obbligatorio, hanno un modificatore che ne specifica la visibilità, le variabili dichiarate all'interno dei metodi non hanno modificatori di visibilità, d'altra parte esse sono visibili solo all'interno del metodo stesso.
Ecco una serie di dichiarazioni corrette, fatto salvo il contesto nel quale esse vengono dichiarate:
public class Leggi {.....}
protected long numero;
class Traduci {.....}
private int i;
public Object[] array;
private String nome;
Queste invece sono una serie di dichiarazioni che produrranno una segnalazione di errore da parte del Compilatore:
public private int altezza; // 2 modificatori, uno e' di troppo
default boolean permesso; // default non e' un modificatore di accesso
protected String protected; // non puo' essere usato come nome di variabile
private
[modifica | modifica sorgente]private
è il modificatore di accesso più restrittivo. I metodi e gli attributi dichiarati private
, non sono visibili né usabili all'esterno della classe che li contiene. Due oggetti della stessa classe però, possono vedere i rispettivi attributi e metodi privati.
Tuttavia è possibile accedervi dall'esterno mediante metodi di lettura e modifica dei valori: metodi "get" e "set". La possibilità di usare valori con il modificatore private
è un punto importante della programmazione a oggetti.
In questo modo i valori private
vengono incapsulati, rendendo impossibile il loro richiamo o modifica da parte di altre porzioni di codice, a causa di disattenzione o casualità, o perfino di codice malevolo. Ovvero per leggerli o modificarli occorre implementare e chiamare appositamente i metodi get e set.
default
[modifica | modifica sorgente]Si applica a tutti gli elementi della classe e ad essa stessa.
Il modificatore di default viene assegnato automaticamente dal compilatore solo quando nella scrittura del sorgente si omettono gli altri modificatori.
Di default indica che l'elemento è di accesso pubblico ma solo ed esclusivamente al package della classe dove è inserito, diversamente da public
e protected
dove è visibile anche in package esterni.
Si può dire che è leggermente più restrittivo di protected
.
protected
[modifica | modifica sorgente]Il modificatore protected
può essere attribuito solo ai metodi e alle variabili interne alla classe e non può essere applicato alla classe stessa. I metodi e le variabili dichiarate come protected
sono visibili da classi dichiarate nello stesso package e da sottoclassi e classi derivate dichiarate ovunque. [1]
Si può dire che è leggermente più restrittivo di public
.
public
[modifica | modifica sorgente]Il modificatore public
può essere attribuito a tutti gli elementi di una classe.
public
definisce l'elemento del programma come "pubblico" e quindi questo è visibile e modificabile dall'esterno della classe, da qualsiasi package.
Note
[modifica | modifica sorgente]