以下代码编译成功:
abstract class A {
private void method() {}
}
interface I {
default void method() {}
}
public class Test extends A implements I {
public static void main(String[] args) {
Test t = new Test();
t.method();
}
}
但是当它运行时,您会得到:
线程“ main”中的异常java.lang.IllegalAccessError:类Test尝试访问私有方法“ void A.printy()”(Test和A在加载程序“ app”的未命名模块中) 在Test.main(Test.java:14)
引用javadocs (IllegalAccessError)表示:
如果应用程序尝试访问或修改字段,或调用它无权访问的方法,则抛出该错误。 通常,编译器会捕获此错误;如果类的定义发生不兼容的更改,则此错误 仅在运行时发生 。
我的代码没有在运行时更改类,为什么编译器没有捕获到这个?