Heim > Java > javaLernprogramm > Können Unterklassen in verschiedenen Paketen direkt auf die geschützten Mitglieder einer Oberklasse zugreifen?

Können Unterklassen in verschiedenen Paketen direkt auf die geschützten Mitglieder einer Oberklasse zugreifen?

Susan Sarandon
Freigeben: 2024-12-07 16:30:15
Original
715 Leute haben es durchsucht

Can Subclasses in Different Packages Directly Access a Superclass's Protected Members?

Geschützten Zugriff in Java verstehen

In Java soll der geschützte Modifikator den Zugriff auf bestimmte Mitglieder innerhalb desselben Pakets und auf Unterklassen ermöglichen in anderen Paketen. Beim Zugriff auf geschützte Mitglieder von einer Instanz der Superklasse außerhalb der Unterklasse entsteht jedoch ein häufiges Missverständnis.

Betrachten Sie das folgende Beispiel:

// Class A
package package1;
public class A {
    protected int protectedInt = 1;
}

// Class C
package package2;
import package1.A;
public class C extends A {
    public void go() {
        A a = new A();
        System.out.println(a.publicInt);
        System.out.println(a.protectedInt); // Eclipse underlines this line
    }
}
Nach dem Login kopieren

Eclipse löst einen Fehler in der Zeile aus, in der a. Auf protectedInt wird zugegriffen und behauptet, es sei nicht sichtbar. Dies scheint der Definition von protected in Java zu widersprechen: „Der protected-Modifikator gibt an, dass auf das Mitglied nur innerhalb seines eigenen Pakets zugegriffen werden kann (wie bei package-private) und zusätzlich von einer Unterklasse seiner Klasse in einem anderen Paket.“

Das Missverständnis auflösen

Der Schlüssel zum Verständnis dieses Verhaltens liegt in der Definition von „geschützt“, da es nur für Unterklassen gilt. Insbesondere ist der Zugriff auf geschützte Mitglieder nur innerhalb des Hauptteils einer Unterklasse zulässig.

Daher kann auf das geschützte Mitglied protectedInt innerhalb der Klasse C zugegriffen werden, jedoch nur für Instanzen der Klasse C selbst oder Instanzen von Unterklassen der Klasse C . Es kann nicht direkt von Instanzen der Superklasse aus zugegriffen werden, auch wenn sie sich im selben Paket befinden.

Um den Fehler in der go-Methode zu beheben, müssten Sie eine Instanz von erstellen Klasse C statt Klasse A:

C c = new C();
System.out.println(c.publicInt);
System.out.println(c.protectedInt);
Nach dem Login kopieren

Dadurch wird über die Unterklasseninstanz korrekt auf das geschützte Mitglied zugegriffen.

Das obige ist der detaillierte Inhalt vonKönnen Unterklassen in verschiedenen Paketen direkt auf die geschützten Mitglieder einer Oberklasse 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