Java/Modificatori di accesso

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search

Java

Linguaggio Java

categoria · sviluppo · modifica
Come posso contribuire?

→ Vai su Wikiversity

Java:  Guida alla programmazioneJava/Introduzione - Specifica di linguaggio - Libreria standardJava/Comunicazione seriale

Tipi di datoJava/Tipi di datoEspressioniJava/OperatoriVariabiliJava/Variabili localiIstruzioniJava/IstruzioniStrutture di controlloJava/Strutture di controlloPackageJava/Package
Classi e oggettiJava/Classi e oggettiOggettiJava/OggettiMetodiJava/MetodiMetodi (cont.)Java/Metodi/2ArrayJava/Array
Modificatori di accessoJava/Modificatori di accessoEreditarietàJava/Ereditarietà
Gestione delle eccezioniJava/Gestione delle eccezioniGenericsJava/Generics
Thread e parallelismoJava/MultithreadingInterblocco ricontrollatoJava/Interblocco ricontrollato
Alcune differenze con il CJava/Concetti fondamentaliLessicoJava/LessicoGrammaticaJava/Grammatica


I modificatori[modifica]

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]

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]

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.

Dunque dove 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.

default[modifica]

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]

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]

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]

  1. Java Language Specification, section 6.6.2