Zugriffsmodifikatoren in Java

1. Übersicht

In diesem Lernprogramm werden Zugriffsmodifikatoren in Java behandelt, mit denen die Zugriffsebene auf Klassen, Variablen, Methoden und Konstruktoren festgelegt wird.

Einfach ausgedrückt gibt es vier Zugriffsmodifikatoren: öffentlich , privat , geschützt und Standard (kein Schlüsselwort).

Bevor wir beginnen, stellen wir fest, dass eine Klasse der obersten Ebene nur öffentliche oder Standardzugriffsmodifikatoren verwenden kann . Auf Mitgliedsebene können wir alle vier verwenden.

2. Standard

Wenn wir kein Schlüsselwort explizit verwenden, legt Java einen Standardzugriff auf eine bestimmte Klasse, Methode oder Eigenschaft fest. Der Standardzugriffsmodifikator wird auch als package-private bezeichnet . Dies bedeutet, dass alle Mitglieder innerhalb desselben Pakets sichtbar sind, aber nicht von anderen Paketen aus zugänglich sind:

package com.baeldung.accessmodifiers; public class SuperPublic { static void defaultMethod() { ... } }

Auf defaultMethod () kann in einer anderen Klasse desselben Pakets zugegriffen werden :

package com.baeldung.accessmodifiers; public class Public { public Public() { SuperPublic.defaultMethod(); // Available in the same package. } }

Es ist jedoch nicht in anderen Paketen verfügbar.

3. Öffentlich

Wenn wir das öffentliche Schlüsselwort zu einer Klasse, Methode oder Eigenschaft hinzufügen , stellen wir es der ganzen Welt zur Verfügung , dh alle anderen Klassen in allen Paketen können es verwenden. Dies ist der am wenigsten einschränkende Zugriffsmodifikator:

package com.baeldung.accessmodifiers; public class SuperPublic { public static void publicMethod() { ... } }

publicMethod () ist in einem anderen Paket verfügbar:

package com.baeldung.accessmodifiers.another; import com.baeldung.accessmodifiers.SuperPublic; public class AnotherPublic { public AnotherPublic() { SuperPublic.publicMethod(); // Available everywhere. Let's note different package. } }

Weitere Informationen zum Verhalten des öffentlichen Schlüsselworts beim Anwenden auf eine Klasse, Schnittstelle, verschachtelte öffentliche Klasse oder Schnittstelle und Methode finden Sie im entsprechenden Artikel.

4. Privat

Auf jede Methode, Eigenschaft oder jeden Konstruktor mit dem privaten Schlüsselwort kann nur von derselben Klasse aus zugegriffen werden . Dies ist der restriktivste Zugriffsmodifikator und der Kern des Konzepts der Kapselung. Alle Daten werden vor der Außenwelt verborgen:

package com.baeldung.accessmodifiers; public class SuperPublic { static private void privateMethod() { ... } private void anotherPrivateMethod() { privateMethod(); // available in the same class only. } }

Dieser detailliertere Artikel zeigt, wie sich das private Schlüsselwort verhält, wenn es auf ein Feld, einen Konstruktor, eine Methode und eine innere Klasse angewendet wird.

5. Geschützt

Zwischen öffentlichen und privaten Zugriffsebenen gibt es den Modifikator für geschützten Zugriff.

Wenn wir eine Methode, eine Eigenschaft oder einen Konstruktor mit dem geschützten Schlüsselwort deklarieren, können wir von demselben Paket (wie bei der paketprivaten Zugriffsebene) und zusätzlich von allen Unterklassen seiner Klasse auf das Mitglied zugreifen , auch wenn sie in anderen Paketen liegen:

package com.baeldung.accessmodifiers; public class SuperPublic { static protected void protectedMethod() { ... } }

protectedMethod () ist in Unterklassen verfügbar (unabhängig vom Paket):

package com.baeldung.accessmodifiers.another; import com.baeldung.accessmodifiers.SuperPublic; public class AnotherSubClass extends SuperPublic { public AnotherSubClass() { SuperPublic.protectedMethod(); // Available in subclass. Let's note different package. } }

Der Artikel beschreibt mehr über das Schlüsselwort, wenn es in einem Feld, einer Methode, einem Konstruktor, einer inneren Klasse verwendet wird, und die Zugänglichkeit in demselben Paket oder einem anderen Paket.

6. Vergleich

In der folgenden Tabelle sind die verfügbaren Zugriffsmodifikatoren zusammengefasst. Wir können sehen, dass eine Klasse unabhängig von den verwendeten Zugriffsmodifikatoren immer Zugriff auf ihre Mitglieder hat:

Modifikator Klasse Paket Unterklasse Welt
Öffentlichkeit
Y. Y. Y. Y.
geschützt
Y. Y. Y. N.
Standard
Y. Y. N. N.
Privat
Y. N. N. N.

7. Fazit

In diesem kurzen Artikel haben wir uns mit Zugriffsmodifikatoren in Java befasst.

Es wird empfohlen, die für ein bestimmtes Mitglied möglichst restriktive Zugriffsebene zu verwenden, um Missbrauch zu verhindern. Wir sollten immer den Modifikator für den privaten Zugriff verwenden, es sei denn, es gibt einen guten Grund, dies nicht zu tun.

Die öffentliche Zugriffsebene sollte nur verwendet werden, wenn ein Mitglied Teil einer API ist.

Wie immer sind die Codebeispiele auf Github verfügbar.