Интересно.Давайте посмотрим, почему суперкласс должен быть инициализирован перед подклассом.
class A
static x = DB.insert(1,...);
class B extends A
static y = DB.select(1);
Статический инициализатор суперкласса может вызвать некоторые побочные эффекты, которые компилятор не может видеть, и подкласс может зависеть от таких побочных эффектов.
Однако тот же аргумент может применяться к суперинтерфейсам.Я не вижу жесткой причины, по которой Java не инициализирует суперинтерфейсы с нетерпением. Мягкие причины являются чьим-либо предположением.
Дайте правила, как они есть, мы должны быть осторожны с инициализацией полей в интерфейсах:
- лучше не иметь никаких полей винтерфейс
- в противном случае поля должны быть только постоянной времени компиляции
- в противном случае инициализация поля лучше не иметь побочных эффектов.
- в противном случае побочный эффект должен быть доступен только черезсамо поле