I modificatori di accesso di Java vengono utilizzati per fornire il controllo dell’accesso in Java. Java offre il controllo dell’accesso attraverso tre parole chiave – private, protected e public. Non siamo sempre obbligati a utilizzare questi modificatori di accesso, quindi ne abbiamo un altro chiamato “accesso predefinito“, “package-private” o “nessun modificatore“.
Modificatori di Accesso Java
Possiamo utilizzare i modificatori di accesso di Java con le classi, nonché con le variabili di classe e i metodi. Possiamo utilizzare solo i modificatori di accesso “public” o “default” con le classi Java.
- Se una classe è “public”, possiamo accedervi da qualsiasi punto, cioè da qualsiasi altra classe situata in qualsiasi altro pacchetto, ecc.
- È possibile avere solo una classe “public” in un file sorgente e il nome del file deve essere lo stesso del nome della classe pubblica.
- Se la classe ha “accesso predefinito”, può essere accessa solo da altre classi nello stesso pacchetto.
Modificatori di Accesso Java con Membro della Classe
Possiamo avere tutti e quattro i modificatori di accesso per le variabili di membro della classe e i metodi. Tuttavia, le regole del modificatore di accesso ai membri vengono applicate dopo le regole di accesso al livello della classe. Ad esempio, se una classe ha un accesso predefinito, non sarà visibile in altri pacchetti e quindi i metodi e le variabili della classe non saranno visibili. Esamineremo ciascuno di essi separatamente e quindi mostreremo l’uso dei modificatori di accesso Java con un programma semplice.
Modificatori di accesso Java – parola chiave pubblica
Se un membro della classe è “pubblico”, può essere accessibile da qualsiasi luogo. La variabile o il metodo di membro è accessibile globalmente. Questo è il modo più semplice per fornire accesso ai membri della classe. Tuttavia, dovremmo fare attenzione nell’usare questa parola chiave con le variabili di classe, altrimenti chiunque può cambiarne i valori. Di solito, le variabili di classe vengono mantenute come private e vengono forniti metodi getter-setter per lavorare con esse.
Modificatori di accesso Java – parola chiave privata
Se un membro della classe è “private”, sarà accessibile solo all’interno della stessa classe. Questo è l’accesso più restrittivo e il membro della classe non sarà visibile al mondo esterno. Di solito, manteniamo le variabili di classe come private e i metodi destinati a essere utilizzati solo all’interno della classe come privati.
Java Modificatori di Accesso – parola chiave “protected”
Se il membro della classe è “protected”, sarà accessibile solo alle classi nello stesso pacchetto e alle sottoclassi. Questo modificatore è meno restrittivo rispetto a “private”, ma più limitato rispetto all’accesso pubblico. Di solito, utilizziamo questa parola chiave per garantire che le variabili di classe siano accessibili solo alle sottoclassi.
Java Modificatori di Accesso – accesso predefinito
Se un membro della classe non ha specificato alcun modificatore di accesso, allora viene trattato con accesso predefinito. Le regole di accesso sono simili alle classi e il membro della classe con accesso predefinito sarà accessibile solo alle classi nello stesso pacchetto. Questo accesso è più limitato rispetto a pubblico e protetto, ma meno limitato rispetto a privato. (Meno Accessibile) privato < predefinito < protetto < pubblico (Più Accessibile) La tabella qui sotto riassume i modificatori di accesso sopra con rispetto alle diverse classi nello stesso pacchetto o in altri pacchetti e sottoclassi. Scriviamo alcune classi semplici dove vedremo i modificatori di accesso di Java in azione.
TestA.java
package com.journaldev.access;
class TestA {
public void methodPublic(){
methodPrivate();
}
protected void methodProtected(){
methodPrivate();
}
void methodDefault(){
methodPrivate();
}
private void methodPrivate(){}
}
Nota che la classe TestA ha accesso predefinito e il metodo di classe privato è accessibile a tutte le altre parti della stessa classe. TestB.java
package com.journaldev.access;
import com.journaldev.access.TestA;
public class TestB {
public static void main(String args[]) {
new TestA().methodPublic();
new TestA().methodProtected();
new TestA().methodDefault();
}
public void methodPublic() {
}
protected void methodProtected() {
}
void methodDefault() {
}
private void methodPrivate() {
}
}
Nota che TestB è nello stesso pacchetto della classe TestA e quindi è in grado di accedere ai suoi membri di classe. I membri privati non sono accessibili ma tutti gli altri membri sono accessibili a causa dello stesso pacchetto. TestC.java
package com.journaldev.access.child;
import com.journaldev.access.TestB;
public class TestC {
public static void main(String[] args) {
new TestB().methodPublic();
}
}
La classe TestB è accessibile perché è pubblica. Solo i membri pubblici della classe TestB sono accessibili perché la classe TestC non è nello stesso pacchetto né sottoclasse di TestB. TestE.java
package com.journaldev.util;
import com.journaldev.access.TestB;
public class TestE extends TestB {
public static void main(String[] args) {
new TestB().methodPublic();
new TestB().methodProtected(); // compile time error
// funziona, accedendo al metodo protetto della superclasse usando la sottoclasse
new TestE().methodProtected();
}
}
Poiché la classe TestE è una sottoclasse di TestB, possiamo accedere ai membri protetti di TestB tramite la classe figlia TestE. Se proviamo ad accedere direttamente al metodo protetto della superclasse, otterremo un errore di compilazione. Questo è tutto per i modificatori di accesso di Java, è semplice da capire. Basta non confondersi con l’accesso predefinito e protetto. Un modo facile per ricordare è che l’accesso predefinito è più restrittivo rispetto a quello protetto e i membri protetti sono accessibili nelle sottoclassi. Di recente ho realizzato un video per spiegare dettagliatamente i modificatori di accesso di Java, puoi guardarlo qui sotto su YouTube. https://www.youtube.com/watch?v=QKjnbC3UBtY
Source:
https://www.digitalocean.com/community/tutorials/java-access-modifiers