Java/Modificatori

Wikibooks, manuali e libri di testo liberi.


Indice

[modifica] I modificatori

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

A questi tre va aggiunto e considerato un modificatore silente detto modificatore di default o di package, ossia friendly, che viene individuato dall'assenza dei 3 modificatori suddetti, che sono mutualmente esclusivi.

I restanti modificatori non sono riconducilbi a categorie di comportamento specifiche, essi sono:

  • abstract
  • final
  • native
  • synchronized
  • static
  • transient
  • volatile

[modifica] I modificatori di accesso

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


[modifica] private

private è il modificatore di accesso più restrittivo. I metodi e gli attributi dichiarati private, non sono visibili ne usabili all'esterno della classe che li contiene.

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, a causa di disattenzione o casualità, da altre porzioni di codice (come potrebbe avvenire in una programmazione procedurale). Ovvero per leggerli o modificarli occorre implementare e chiamare appositamente i metodi get e set.

Dunque ove possibile bisogna sempre editare come private gli elementi del programma, è una indicazione forte ma non un obbligo.

Si veda l'esempio di codice nella sezione "Esempi" del libro.


[modifica] default

Si applica a tutti gli elementi della classe e ad essa stessa.

Il modificatore default viene assegnato automaticamente dal compilatore solo quando nella scrittura del sorgente si omettono gli altri modificatori.

default indica che l'elemento è di accesso publico 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.


[modifica] protected

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 unicamente dalle sottoclassi o classi derivate, in qualsiasi package queste si trovino. Se si vuole rendere visibili metodi e variabili esclusivamente alle sottoclassi di qualsiasi package, è perciò necessario dichiararli protected. Si può dire che è leggermente più restrittivo di public.

[modifica] public

Il modificatore public può essere attribuito a tutti gli elementi di una classe e ad essa stessa.

public definisce l'elemento del programma come "pubblico" e quindi questo è visibile e modificabile dall'esterno della classe, da qualsiasi package.


[modifica] friendly

Il modificatore friendly viene attribuito a una classe nel caso non sia specificato nessun altro modificatore, pertanto generalmente si omette di scriverlo.

friendly definisce la classe come "pubblica" all'interno dello stesso package, ma invisibile e inaccessibile da altri package.

Strumenti personali