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

静态方法&;继承–;编译时未找到java.lang.IllegalAccessError,java,inheritance,static-methods,Java,Inheritance,Static Methods,我的文件结构和代码如下: ../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/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.
}
}

在带有注释的行中,编译时没有错误,但在运行时有Illegalaceserror

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


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

抛出错误是因为您已将方法的可见性设置为受保护的,这意味着只能从子类或在同一个包中访问这些方法

因此,抛出
IllegalAccessError
的原因是,您的类
Z
不是
C
的子类,也不是
Z
C
在同一个包中

Eclipse给了我一个编译器错误:

线程“main”java.lang中出现异常。错误:未解决的编译问题: 类型C中的doSomething()方法不可见“


这可能是javac中的错误–请参阅。

只有最后一行会抛出错误吗?是的,只有最后一行会抛出错误。这是什么Java版本?我不知道它来自哪个版本,但我使用的是Java 8。我知道此错误的原因,但我想知道为什么找不到错误以及编译时(除非我使用cmd中的javac编译Z.java)。哦,对不起,我误解了你的问题。那么我帮不了你。正如我的回答中所示,eclipse给了我一个完全相同的代码的complie时间错误,所以我不知道为什么它对你不起作用。这很有趣,因为在NetBeans中,在运行时之前没有错误。@Dimitros Begnis你能不能删除你的答案,这样这个没有帮助的问题就可以解决了远离的?