In Java sind Zugriffsmodifikatoren wesentliche Werkzeuge, die definieren, wie von anderen Teilen unseres Programms aus auf die Mitglieder einer Klasse wie Variablen, Methoden und sogar auf die Klasse selbst zugegriffen werden kann.
In Java stehen vier Arten von Zugriffsmodifikatoren zur Verfügung:
Zugriffsmodifikatoren in JavaModifikator für privaten Zugriff
Der private Zugriffsmodifikator wird mit dem Schlüsselwort private angegeben. Auf die als privat deklarierten Methoden oder Datenelemente kann nur innerhalb der Klasse zugegriffen werden, in der sie deklariert sind.
Java
class Person { // private variable private String name; public void setName(String name) { this.name = name; // accessible within class } public String getName() { return name; } } public class Geeks { public static void main(String[] args) { Person p = new Person(); p.setName('Alice'); // System.out.println(p.name); // Error: 'name' // has private access System.out.println(p.getName()); } }
Ausgabe
Alice
Erläuterung: Der direkte Zugriff auf den Namen ist außerhalb der Person, die die Kapselung erzwingt, nicht gestattet.
Standardzugriffsmodifikator
Wenn für eine Klassenmethode oder ein Datenelement kein Zugriffsmodifikator angegeben ist, wird davon ausgegangen, dass sie standardmäßig über den Standardzugriffsmodifikator verfügt. Das bedeutet, dass nur Klassen innerhalb desselben Pakets darauf zugreifen können.
Javaclass Car { String model; // default access } public class Main { public static void main(String[] args){ Car c = new Car(); c.model = 'Tesla'; // accessible within the same package System.out.println(c.model); } }
Ausgabe
Tesla
Erläuterung: Auf Mitglieder mit Standardzugriff kann nicht von Klassen in einem anderen Paket aus zugegriffen werden.
Geeks.java: Standardklasse innerhalb desselben Pakets
Java// default access modifier package p1; // Class Geek is having // Default access modifier class Geek { void display() { System.out.println('Hello World!'); } }
GeeksNew.java: Standardklasse aus einem anderen Paket (als Kontrast)
C++// package with default modifier package p2; import p1.*; // importing package p1 // This class is having // default access modifier class GeekNew { public static void main(String args[]) { // Accessing class Geek from package p1 Geek o = new Geek(); o.display(); } }
Erläuterung: In diesem Beispiel zeigt das Programm den Kompilierzeitfehler an, wenn wir versuchen, aus einem anderen Paket auf eine Standardmodifikatorklasse zuzugreifen.
Modifikator für geschützten Zugriff
Der geschützte Zugriffsmodifikator wird mit dem Schlüsselwort protected angegeben. Auf die als geschützt deklarierten Methoden oder Datenelemente kann innerhalb desselben Pakets oder in Unterklassen in verschiedenen Paketen zugegriffen werden.
Javaclass Vehicle { protected int speed; // protected member } class Bike extends Vehicle { void setSpeed(int s) { speed = s; // accessible in subclass } int getSpeed() { return speed; // accessible in subclass } } public class Main { public static void main(String[] args){ Bike b = new Bike(); b.setSpeed(100); System.out.println('Access via subclass method: ' + b.getSpeed()); Vehicle v = new Vehicle(); System.out.println(v.speed); } }
Ausgabe
Access via subclass method: 100 0
Erläuterung: Auf Geschwindigkeit kann über Unterklassenmethoden und andere Klassen im selben Paket zugegriffen werden, der direkte Zugriff von einem anderen Paket (nicht Unterklasse) würde jedoch fehlschlagen.
Modifikator für den öffentlichen Zugriff
Der öffentliche Zugriffsmodifikator wird mit dem Schlüsselwort public angegeben. Öffentliche Mitglieder sind von überall im Programm aus zugänglich. Es gibt keine Einschränkung hinsichtlich des Umfangs öffentlicher Datenelemente.
Javaclass MathUtils { public static int add(int a int b) { return a + b; } } public class Main { public static void main(String[] args) { System.out.println(MathUtils.add(5 10)); // accessible anywhere } }
Ausgabe
15
Erläuterung: add() ist aufgrund des öffentlichen Modifikators global zugänglich.
Klassen oder Schnittstellen der obersten Ebene können nicht als privat deklariert werden, da privat „nur innerhalb der umschließenden Klasse sichtbar“ bedeutet.
Vergleichstabelle der Zugriffsmodifikatoren in Java
ZugriffsmodifikatorWann die einzelnen Zugriffsmodifikatoren in realen Projekten verwendet werden sollten
- Privat: Die Idee sollte darin bestehen, den Zugriff so restriktiv wie möglich zu gestalten, sodass der private Zugriff so weit wie möglich erfolgen sollte.
- Standard (Paketprivat): Wird häufig in paketbezogenen Dienstprogrammen oder Hilfsklassen verwendet.
- Geschützt: Wird häufig in vererbungsbasierten Designs wie Framework-Erweiterungen verwendet.
- Öffentlich : Dies wird für API-Endpunkt-Dienstklassen oder Dienstprogrammmethoden verwendet, die in verschiedenen Teilen einer Anwendung gemeinsam genutzt werden.