Den geschützten Modifikator von Java und seine Zugänglichkeitsbeschränkungen verstehen
Der geschützte Zugriffsmodifikator in Java führt oft zu Verwirrung hinsichtlich seiner beabsichtigten Verwendung. Eine solche Instanz tritt auf, wenn versucht wird, aus einem anderen Paket auf ein geschütztes Mitglied einer Superklasse zuzugreifen.
Im bereitgestellten Beispiel enthält Klasse A eine Instanzvariable protectedInt, die mit geschütztem Zugriff deklariert wurde. Laut Oracle-Dokumentation sollten geschützte Mitglieder innerhalb desselben Pakets oder Unterklassen ihrer Klasse in anderen Paketen zugänglich sein. Wenn jedoch Klasse C (erweitert Klasse A) versucht, auf protectedInt zuzugreifen, meldet Eclipse den Fehler „A.protectedInt“ ist nicht sichtbar.
Der Grund für diesen Fehler liegt in der korrekten Interpretation des geschützten Zugriffsmodifikators. Geschützter Zugriff erlaubt die Verwendung geschützter Mitglieder innerhalb der Klasse, die sie deklariert, und nur innerhalb von Unterklassen dieser Klasse, unabhängig vom Paket, zu dem sie gehören.
Zur Veranschaulichung: Dieses Codefragment funktioniert wie vorgesehen:
C c = new C(); System.out.println(c.publicInt); System.out.println(c.protectedInt);
Das liegt daran, dass der Typ von c eine Instanz von C ist, was eine Unterklasse von A ist. Wenn c jedoch eine Instanz von A wäre, wäre der Zugriff auf protectedInt nicht der Fall möglich.
Dieses Verhalten steht im Einklang mit Abschnitt 6.6.2 der Java Language Specification (JLS), der besagt, dass auf ein geschütztes Mitglied nur innerhalb von Unterklassen zugegriffen werden kann und wenn der Zugriff über einen Feldzugriff oder einen Methodenaufrufausdruck erfolgt, Der Typ des Objekts muss die Unterklasse oder eine weitere Unterklasse sein.
Das obige ist der detaillierte Inhalt vonWarum kann ich in Java nicht von einem anderen Paket aus auf das geschützte Mitglied einer Superklasse zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!