次の例ですべての問題が解決すると思います。
クラスが初期化される前に、そのスーパークラスは、以前に初期化されていない場合は初期化されます。
したがって、テストプログラムは次のようになります。
class Super {
static { System.out.print("Super "); }
}
class One {
static { System.out.print("One "); }
}
class Two extends Super {
static { System.out.print("Two "); }
}
class Test {
public static void main(String[] args) {
One o = null;
Two t = new Two();
System.out.println((Object)o == (Object)t);
}
}
プリント:
Super Two false
クラスOneはアクティブに使用されないため、初期化されることはなく、したがってリンクされることもありません。クラス2は、そのスーパークラスSuperが初期化された後にのみ初期化されます。
詳細については、このリンクをご覧ください
詳細の編集:紛らわしい行を削除しました。