Heim >Java >javaLernprogramm >Warum kann eine Unterklasse in einem anderen Paket nicht auf ein geschütztes Mitglied ihrer Oberklasse in Java zugreifen?

Warum kann eine Unterklasse in einem anderen Paket nicht auf ein geschütztes Mitglied ihrer Oberklasse in Java zugreifen?

DDD
DDDOriginal
2024-12-08 22:51:11724Durchsuche

Why Can't a Subclass in a Different Package Access a Protected Member of its Superclass in Java?

Navigieren durch Javas geschützte Zugriffsmodifikatoren

Problem:

Betrachten Sie zwei Klassen, A in Paket1 und C in Paket2, wobei C A erweitert. Klasse A definiert eine Instanzvariable protectedInt, die mit dem Modifikator protected deklariert ist. Eclipse meldet jedoch einen Fehler beim Zugriff auf dieses protectedInt aus der Klasse C. Dies scheint der Definition von protected in der Dokumentation zu widersprechen, die den Zugriff innerhalb von Unterklassen aus anderen Paketen zulässt.

Antwort:

Das Missverständnis ergibt sich aus dem spezifischen Kontext, in dem geschützter Zugang gewährt wird. Das JLS (Abschnitt 6.6.2) stellt klar, dass auf geschützte Mitglieder tatsächlich von Unterklassen in anderen Paketen zugegriffen werden kann, jedoch nur für Instanzen der Unterklasse oder Instanzen von Unterklassen der Unterklasse.

Konkret können nur geschützte Mitglieder darauf zugreifen Der Zugriff erfolgt über einen Feldzugriffsausdruck (z. B. E.Id) oder einen Methodenaufrufausdruck (z. B. E.Id(. . .)), wenn der Typ von E ist die Unterklasse selbst (d. h. S) oder eine Unterklasse von S.

Im gegebenen Szenario verwendet der Code, der versucht, auf a.protectedInt zuzugreifen, eine Instanz von A als Ausdruck E. Da A ist Da es sich nicht um eine Unterklasse von C handelt, ist dieser Zugriff gemäß der JLS-Regel nicht zulässig.

Daher gewährt der geschützte Modifikator geschützten Mitgliedern innerhalb von Unterklassen Zugriff, jedoch nur für Instanzen der Unterklasse oder ihrer Unterklassen.

Das obige ist der detaillierte Inhalt vonWarum kann eine Unterklasse in einem anderen Paket nicht auf ein geschütztes Mitglied ihrer Oberklasse in Java zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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