Java fornisce una serie di modificatori di accesso per impostare i livelli di accesso per le classi, variabili, metodi e costruttori. I quattro livelli di accesso sono –
- Visibili al pacchetto, il valore predefinito. Non sono necessari modificatori.
- Visibile solo alla classe (privata).
- Visibile al mondo (pubblico).
- Visibile al pacchetto e a tutte le sottoclassi (protette).,
Modificatore di accesso predefinito – Nessuna parola chiave
Modificatore di accesso predefinito significa che non dichiariamo esplicitamente un modificatore di accesso per una classe, un campo, un metodo, ecc.
Una variabile o un metodo dichiarato senza alcun modificatore di controllo degli accessi è disponibile per qualsiasi altra classe nello stesso pacchetto. I campi in un’interfaccia sono implicitamente public static final e i metodi in un’interfaccia sono per impostazione predefinita public.,
Esempio
Variabili e metodi possono essere dichiarati senza modificatori, come nei seguenti esempi −
String version = "1.5.1";boolean processOrder() { return true;}
Modificatore di accesso privato – Privato
I metodi, le variabili e i costruttori dichiarati privati sono accessibili solo all’interno della classe dichiarata stessa.
Modificatore di accesso privato è il livello di accesso più restrittivo. La classe e le interfacce non possono essere private.
Le variabili dichiarate private sono accessibili al di fuori della classe, se nella classe sono presenti metodi getter pubblici.,
L’utilizzo del modificatore privato è il modo principale in cui un oggetto si incapsula e nasconde i dati dal mondo esterno.
Esempio
La seguente classe utilizza il controllo di accesso privato −
Qui, la variabile di formato della classe Logger è privata, quindi non c’è modo per altre classi di recuperare o impostare direttamente il suo valore.
Quindi, per rendere questa variabile disponibile al mondo esterno, abbiamo definito due metodi pubblici: getFormat(), che restituisce il valore di format, e setFormat(String), che imposta il suo valore.,
Modificatore di accesso pubblico-Pubblico
Una classe, metodo,costruttore, interfaccia, ecc. è possibile accedere a public dichiarato da qualsiasi altra classe. Pertanto, i campi, i metodi, i blocchi dichiarati all’interno di una classe pubblica sono accessibili da qualsiasi classe appartenente all’Universo Java.
Tuttavia, se la classe pubblica a cui stiamo tentando di accedere si trova in un pacchetto diverso, la classe pubblica deve ancora essere importata. A causa dell’ereditarietà della classe, tutti i metodi e le variabili pubbliche di una classe vengono ereditati dalle sue sottoclassi.,
Esempio
La seguente funzione utilizza il controllo di accesso pubblico −
public static void main(String arguments) { // ...}
Il metodo main() di un’applicazione deve essere pubblico. Altrimenti, non potrebbe essere chiamato da un interprete Java (come java) per eseguire la classe.
Protected Access Modifier – Protected
Le variabili, i metodi e i costruttori dichiarati protetti in una superclasse sono accessibili solo dalle sottoclassi in un altro pacchetto o da qualsiasi classe all’interno del pacchetto della classe dei membri protetti.
Il modificatore di accesso protetto non può essere applicato alla classe e alle interfacce., Metodi, campi possono essere dichiarati protetti, tuttavia metodi e campi in un’interfaccia non possono essere dichiarati protetti.
L’accesso protetto dà alla sottoclasse la possibilità di utilizzare il metodo o la variabile helper, impedendo a una classe non correlata di provare ad usarlo.
Esempio
La seguente classe padre utilizza il controllo di accesso protetto, per consentire alla sua classe figlio di sovrascrivere il metodo openSpeaker () −
class AudioPlayer { protected boolean openSpeaker(Speaker sp) { // implementation details }}class StreamingAudioPlayer extends AudioPlayer { boolean openSpeaker(Speaker sp) { // implementation details }}
Qui, se definiamo il metodo openSpeaker() come privato, allora non sarebbe accessibile da nessun’altra classe diversa da AudioPlayer., Se lo definiamo pubblico, allora diventerebbe accessibile a tutto il mondo esterno. Ma la nostra intenzione è di esporre questo metodo solo alla sua sottoclasse, ecco perché abbiamo usato il modificatore protetto.
Controllo di accesso ed ereditarietà
Vengono applicate le seguenti regole per i metodi ereditati −
-
I metodi dichiarati pubblici in una superclasse devono essere pubblici anche in tutte le sottoclassi.
-
I metodi dichiarati protetti in una superclasse devono essere protetti o pubblici in sottoclassi; non possono essere privati.,
-
I metodi professati privati non sono affatto ereditati, quindi non esiste una regola per loro.