为什么在这种情况下编译器未捕获到“ IllegalAccessError”?

时间:2020-11-07 15:51:32

标签: java compiler-errors javac

以下代码编译成功:

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)表示:

如果应用程序尝试访问或修改字段,或调用它无权访问的方法,则抛出该错误。 通常,编译器会捕获此错误;如果类的定义发生不兼容的更改,则此错误 仅在运行时发生

我的代码没有在运行时更改类,为什么编译器没有捕获到这个?

0 个答案:

没有答案
相关问题