I experience strange behavior when using static import of inherited static methods:
com / example / Util / BaseUtil.java:
package com.example.util; class BaseUtil { public static final void foo(){ System.out.println("foo"); } }
com / example / Util / Util.java:
package com.example.util; public final class Util extends BaseUtil{ public static void bar(){ System.out.println("bar"); }
com / example / UtilTest.java
package com.example; import static com.example.util.Util.bar; import static com.example.util.Util.foo; public class UtilTest { public static void main(String[] args) { bar(); foo(); } }
Running UtilTest will result in an unchecked exception!
Exception in thread "main" java.lang.IllegalAccessError: tried to access the class com.example.util.BaseUtil from class com.example.UtilTest
at com.example.UtilTest.main(UtilTest.java:15)
However, if I had to invoke methods using Util (without static import), everything works as expected:
com / example / UtilTest.java
package com.example; import com.example.util.Util; public class UtilTest { public static void main(String[] args) { Util.bar(); Util.foo(); } }
So what gives?
source share