静态方法&;继承–;编译时未找到java.lang.IllegalAccessError
我的文件结构和代码如下: ../inside/A.java静态方法&;继承–;编译时未找到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
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你能不能删除你的答案,这样这个没有帮助的问题就可以解决了远离的?