Я думаю, что следующий пример решит все ваши проблемы:
Перед инициализацией класса его суперклассы инициализируются, если они не были инициализированы ранее.
Таким образом, тестпрограмма:
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 никогда не инициализируется, поскольку он не используется активно и поэтому никогда не связан с.Класс Two инициализируется только после того, как его суперкласс Super был инициализирован.
Для получения более подробной информации посетите эту ссылку
Редактировать детали: Удалены путающие строки.