【发布时间】:2016-04-17 12:53:48
【问题描述】:
我有这样的文件结构和代码:
../inside/A.java
package inside;
public class A{protected static void someStaticMethod(){}}
../inside/B.java
package inside;
import inside.A;
public class B extends A{protected static void someStaticMethod(){}}
../inside/C.java
package inside;
import inside.B;
public class C extends B{protected static void someStaticMethod(){}}
../Z.java
import inside.*;
class Z extends B{
public static void main(String args[]){
A.someStaticMethod();
B.someStaticMethod();
C.someStaticMethod(); // Fine at compile-time but IllegalAccessError at run-time.
}
}
与注释一致,编译时没有错误,但运行时出现 IllegalAccesError。
这种行为的真正原因是什么?
我发现了一个问题 - Why does Java bind variables at compile time? - 在第一个答案中可能提到了原因,但我绝对不确定。
【问题讨论】:
-
只有最后一行抛出错误吗?
-
是的,只有最后一行会抛出错误。
-
那是什么 Java 版本?
-
我不知道它来自哪个版本,但我使用的是 Java 8。
标签: java inheritance static-methods