Protected access modifier in Java

Ich bin mit ein wenig Schwierigkeiten zu verstehen, die protected access modifier in java (oder das design dahinter). Ich dachte, es bedeutete Paket-Zugriff und Zugriff über Objekte Erben von der Klasse, die eine abstrakte member.

Schrieb ich den folgenden Beispielcode. Ich sehe, dass der auskommentierten Zeile erzeugt einen Kompilierungsfehler, wenn Sie unkommentiert. Warum kann ich auf pro durch ein Zweites Objekt in der Zweiten, aber nicht durch ein Erstes Objekt in der Zweiten?

package first;

public class First {

    protected void pro(){
        System.out.println("Can see protected method");
    }

}

package first;

public class InFirst {


    public static void main(String[] args){
        First fst = new First();
        fst.pro();
    }

}

package second;

import first.First;

public class Second extends First {

    public static void main(String[] args){

        First fst = new First();

//     fst.pro();

        Second sec = new Second();
        sec.pro();

    }
}
  • Vielleicht nehmen Sie einen Lesevorgang durch Steuerung des Zugriffs auf die Mitglieder einer Klasse für mehr details
  • Gute Beobachtung. Normalerweise ist dies verwirrend für viele Entwickler. Sehen Sie das Diagramm unten, vielleicht ist es hilfreich.
  • Danke, habe ich gelesen. Ich bin grundsätzlich verwirrt durch den Satz "durch eine Unterklasse Ihrer Klasse in einem anderen package", die Sie verwenden für die geschützten modifier. Wie oben gezeigt, auf die ich zugreifen kann pro Sekunde, sondern nur durch ein Zweites Objekt sec und nicht durch ein Erstes Objekt fst.
  • Ich denke, die wichtigen Details, die Sie fehlen in der Unterklasse Zugriff von einer übergeordneten Klasse protected-Mitglied, ist, dass der Zugriff zu erfolgen hat, die im Kontext der Unterklasse 'Umsetzung' (die Skillung bezieht sich auf den Körper, gleichen Unterschied). Die main-Methode einer Klasse ist nicht als Teil seiner Implementierung, die ist, warum Sie eine Fehlermeldung erhalten.
  • Wenn ich Schreibe den gleichen Satz von Anweisungen in einer nicht-statischen Methode in der Zweiten, ich bekomme immer noch die gleiche Fehlermeldung, wenn ich kommentieren Sie die auskommentierte Zeile. Das ist also nicht die Quelle des Fehlers.
  • Sie sich da sicher? Check out das Projekt, und lassen Sie mich wissen, wenn Ihre Probe ist anders.
  • Sorry, ich bin nicht in der Lage, um zu sehen, alle source-Dateien von diesem link. Im Grunde, in eine nicht-statische Methode aus der Zweiten, kann ich nicht auf pro auf einem Ersten Objekt, genau wie in der main-Methode. Natürlich kann ich das überschreiben pro Sekunde und auch pro Anruf von einer nicht-statischen Methode, die effektiv aufrufen pro-am "dieses". Ich habe dies alles schriftlich sameple code.
  • Sie haben, um einen Drilldown in die Verzeichnisse. Hier für die Beispiele, sind die Klassen in der first Paket.
  • Hier ist eine einfache Spickzettel erklärt, dass protected und die anderen zugriffsmodifizierer.

InformationsquelleAutor B M | 2013-04-11
Schreibe einen Kommentar