Considérons ci-dessous hiérarchie de classe.
class ClassA {
private void hello() {
System.out.println("Hello from A");
}
}
interface Myinterface {
default void hello() {
System.out.println("Hello from Interface");
}
}
class ClassB extends ClassA implements Myinterface {
}
public class Test {
public static void main(String[] args) {
ClassB b = new ClassB();
b.hello();
}
}
Exécute le programme donnera l'erreur suivante :
Exception in thread "main" java.lang.IllegalAccessError: tried to access method com.testing.ClassA.hello()V from class com.testing.Test
at com.testing.Test.main(Test.java:23)
- Tout cela parce que j'ai marqué ClassA.bonjour comme privé.
- Si je marque ClassA.bonjour protégées ou supprimer le modificateur de visibilité(c'est à dire en le rendant étendue par défaut), puis il montre une erreur de compilation, comme :
The inherited method ClassA.hello() cannot hide the public abstract method in Myinterface
Toutefois, par exception stacktrace ci-dessus, je reçois un runtime IllegalAccessError.
Je ne pouvais pas comprendre pourquoi ce n'est pas détectée au moment de la compilation. Des indices ?