Heim > Java > javaLernprogramm > Warum kann ich in Java nicht von einem anderen Paket aus auf das geschützte Mitglied einer Superklasse zugreifen?

Warum kann ich in Java nicht von einem anderen Paket aus auf das geschützte Mitglied einer Superklasse zugreifen?

Susan Sarandon
Freigeben: 2024-12-07 20:45:16
Original
736 Leute haben es durchsucht

Why Can't I Access a Superclass's Protected Member from a Different Package in Java?

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage