我有这样的文件结构和代码:
../内部/ A.java
package inside;
public class A{protected static void someStaticMethod(){}}
../内部/ B.java
package inside;
import inside.A;
public class B extends A{protected static void someStaticMethod(){}}
../内部/ 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? - 在第一个答案中可能会提到原因,但我肯定不确定。
答案 0 :(得分:0)
抛出错误是因为您已将方法的可见性设置为protected
,这意味着只能从子类或同一包中访问这些方法。
因此引发IllegalAccessError
的原因是因为您的类Z
不是来自C
的子类,也不是Z
与{C
在同一个包中1}}。
Eclipse给了我一个编译器错误:
“线程中的异常”主“java.lang.Error:未解决的编译问题: 来自C类的doSomething()方法不可见“
答案 1 :(得分:0)
这可能是javac(Oracle Java编译器)中的错误 - 请参阅http://www.coderanch.com/t/664583/java/java/Static-methods-inheritance-java-lang。