ProgrammierungJava-Entwickler

Beschreiben Sie, wie der Zugriffsmodifikator protected in Java funktioniert, was sein Unterschied zu anderen Modifikatoren ist und welche Fehler beim falschen Verständnis gemacht werden können.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

Der Zugriffsmodifikator protected ermöglicht es, dass Klassenmitglieder innerhalb desselben Pakets (package) und in allen Unterklassen (subclasses), auch wenn sie sich in anderen Paketen befinden, sichtbar sind.

Unterschiede zu anderen Modifikatoren:

  • private — Zugriff nur innerhalb der aktuellen Klasse
  • default (kein Modifikator) — nur im aktuellen Paket verfügbar
  • protected — innerhalb des aktuellen Pakets und in Erben außerhalb des Pakets verfügbar
  • public — überall verfügbar

Beispiel:

package com.example.base; public class Parent { protected void sayHello() { System.out.println("Hallo vom Elternteil"); } } package com.example.child; import com.example.base.Parent; public class Child extends Parent { public void tryHello() { sayHello(); // Zugriff ist vorhanden! } } public class NotChild { public void fail(Parent p) { // p.sayHello(); // Fehler: kein Zugriff } }

Fangfrage.

Kann eine äußere Klasse (die kein Erbe ist) über ein Objekt dieser Klasse auf eine protected-Methode aus einem anderen Paket zugreifen?

Antwort: Nein, der Zugriff auf eine protected-Methode aus einem anderen Paket ist nur für erbende Klassen erlaubt und nur über this oder über eine Referenz auf ein Erbobjekt, nicht auf das Elternobjekt.

Parent p = new Child(); p.sayHello(); // Fehler! ((Child) p).sayHello(); // Erfolg (wenn innerhalb von Child aufgerufen)

Beispiele für reale Fehler aufgrund von Unkenntnis der Feinheiten des Themas.


Geschichte

In einem großen modularen Projekt platzierte ein Entwickler wichtige Geschäftsmethoden im protected-Bereich, in der Annahme, dass sie außerhalb des Pakets nicht zugänglich sind. Andere Entwickler verwendeten diese Methoden versehentlich in Tests im selben Paket, und durch die spätere Verschiebung von Klassen traten unerwartete Zugriffsfehler auf.


Geschichte

In einem Mikroservices-Projekt wurde versucht, eine Methode mit protected-Zugriff über eine Referenz auf den Elterntyp in einem anderen Paket aufzurufen — der Aufruf funktionierte nicht. Dies führte zu einem Ausfall vieler Erweiterungsmechanismen, da man von einem falschen Verständnis des Sichtbarkeitsbereichs ausging.


Geschichte

In einer Open-Source-Bibliothek wurden protected-Feldern unachtsam verwendet, die zu weitreichend für viele Klassen verfügbar waren, sodass der innere Zustand des Objekts versehentlich beschädigt wurde, was Probleme in Drittanbieteranwendungen verursachte.