Überschreiben protected-Methoden in Java
Test.java
package a;
import b.B;
public class Test {
public static void main(String[] v) {
new A().test();
new B().test();
}
}
A.java:
package a;
public class A {
protected void test() { }
}
B.java:
package b;
public class B extends a.A {
protected void test() { }
}
Warum new B().test()
eine Fehlermeldung zu geben? Nicht, dass die break-visibility-Regeln?
B.test()
ist unsichtbar in Test
weil Sie in verschiedenen Paketen, und doch ist es nicht zu nennen, die test()
im B
's Superklasse, das sichtbar ist.
Links zu den entsprechenden Teil der JLS würde geschätzt.
InformationsquelleAutor der Frage CromTheDestroyer | 2011-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier gehen Sie JLS auf
protected
Schlagwort:JLS-geschützt Beschreibung und JLS geschützt Beispiel.
Grundsätzlich eine
protected
Modifikator bedeutet, dass Sie Zugriff auf Feld /Methode /... 1) in einer Unterklasse der gegebenen Klasse und 2) die von den Klassen im gleichen Paket.Da 2)
new A().test()
funktioniert. Abernew B().test()
funktioniert nicht, weil KlasseB
ist in verschiedenen Paket.InformationsquelleAutor der Antwort pajton
Das problem ist, dass zur compile-Zeit, die Sie sagen, sind Java, die Sie möchten, um Zugang zu einem geschützten member einer Klasse, wenn Sie nicht über einen solchen Zugang.
Wenn Sie dies nicht statt;
Dann würde es auch funktionieren und die überschriebene Methode ausgeführt, weil bei der Kompilierung von Java-Prüfungen, haben Sie Zugriff auf A., Bei der Laufzeit ist das Objekt zur Verfügung gestellt hat, die entsprechende Methode, so die test () - Methode ausgeführt. Dynamische Bindung oder späte Bindung ist der Schlüssel.
InformationsquelleAutor der Antwort Vincent Ramdhanie
Dies ist nicht nur, wie die Vererbung funktioniert in Java.
Wenn eine Methode überschrieben ist, und die überschriebene Methode ist nicht sichtbar, es ist eine compile-Zeit-Fehler, zu versuchen, und nennen Sie es.
Du scheinst zu erwarten, dass Java automatisch zurückgreifen, um die Methode in die super-Klasse, aber das passiert nicht.
Ich werde versuchen zu Graben und aus der JLS später auf, warum dies nicht geschieht...
InformationsquelleAutor der Antwort sleske
Ja, überschreiben die protected-Methode möglich ist.
Ausgabe: B
InformationsquelleAutor der Antwort Manas