静态方法和继承 – java.lang.IllegalAccessError 未在编译时找到

Static methods & inheritance – java.lang.IllegalAccessError not found at compile-time

我有这样的文件结构和代码:

../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.
}

}

注释行在编译时没有错误,但在运行时有 IllegalAccessError。

这种行为的真正原因是什么?

我发现了一个问题 – – 在第一个答案中可能提到了原因,但我绝对不确定。

抛出错误是因为您将方法的可见性设置为 protected,这意味着只能从子 class 或同一包中访问这些方法。

所以抛出 IllegalAccessError 的原因是因为你的 class Z 不是 C 的子 class 也不是 ZC.

在同一个包中

Eclipse 给我一个编译器错误:

"Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method doSomething() from the type C is not visible"

这可能是 javac 中的错误 – 参见 http://www.coderanch.com/t/664583/java/java/Static-methods-inheritance-java-lang