継承された静的メソッドの静的インポートを使用すると、奇妙な動作が発生します。
com/example/util/BaseUtil.java:
package com.example.util;
/*default*/ 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"); }
//foo() will be inherited
}
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();
}
}
実行UtilTest
すると非チェック例外が発生します!
スレッド「メイン」の例外 java.lang.IllegalAccessError: クラス com.example.util.BaseUtil からクラス com.example.UtilTest にアクセスしようとしました
at com.example.UtilTest.main(UtilTest.java:15)
Util
ただし、 (静的インポートなしで)メソッドを参照すると、すべてが期待どおりに機能します。
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();
}
}
それで、何が得られますか?