# Java/Modificatori di accesso

| Java Linguaggio Java categoria · sviluppo · Come posso contribuire? → Vai su Wikiversity | Java: Guida alla programmazioneJava/Introduzione - Specifica di linguaggio - Libreria standardJava/Comunicazione seriale Tipi di datoJava/Tipi di dato • EspressioniJava/Operatori • VariabiliJava/Variabili locali • IstruzioniJava/Istruzioni • Strutture di controlloJava/Strutture di controllo • PackageJava/Package Classi e oggettiJava/Classi e oggetti • OggettiJava/Oggetti • MetodiJava/Metodi • Metodi (cont.)Java/Metodi/2 • ArrayJava/Array Modificatori di accessoJava/Modificatori di accesso • EreditarietàJava/Ereditarietà Gestione delle eccezioniJava/Gestione delle eccezioni • GenericsJava/Generics Thread e parallelismoJava/Multithreading • Interblocco ricontrollatoJava/Interblocco ricontrollato Alcune differenze con il CJava/Concetti fondamentali • LessicoJava/Lessico • GrammaticaJava/Grammatica |

## 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
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

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:
Queste invece sono una serie di dichiarazioni che produrranno una segnalazione di errore da parte del Compilatore:

### private

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

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

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. Si può dire che è leggermente più restrittivo di public.

### public

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

* ↑ Java Language Specification, section 6.6.2