Primordial protégé méthodes en 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() { }
}

Pourquoi ne new B().test() donner une erreur? N'est-ce pas briser les règles de visibilité?

B.test() est invisible dans Test parce qu'ils sont dans les packages différents, et pourtant, il refuse d'appeler le test() dans B'super-classe qui est visible.

Des liens vers la partie appropriée de la JLS serait appréciée.

"donner une erreur" .. Pouvez-vous être plus précis?
il demande pourquoi il ne peut pas appeler une méthode qu'il a accès à la méthode super.
il refuse de compiler: "un/Test.java:10: test() a un accès protégé dans b.B"
Lisez la question: "n'est-ce pas briser les règles de visibilité?"
l'erreur est (dans ce cas) assez évident: c'est une erreur de compilation disant B().test() n'est pas visible pour a.Test.main(String[]).

OriginalL'auteur CromTheDestroyer | 2011-04-12