logo

Zugriffsmodifikatoren in Java

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-Java-1' title=Zugriffsmodifikatoren in Java

Modifikator 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.

Java
class 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.

Java
class 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.

Java
class 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

gleiche_klasse' loading='lazy' title=Zugriffsmodifikator

Wann 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.


Quiz erstellen