Heim >Java >javaLernprogramm >Warum kann eine Unterklasse in einem anderen Paket nicht auf ein geschütztes Mitglied ihrer Oberklasse in Java zugreifen?
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!