Вы никогда не задумывались, как происходит инициализация объекта класса, который в свою очередь наследуется от другого класса?

Порядок довольно прост. Допустим у нас есть класс Parent и класс Child. Child является потомком Parent.
В обоих классах есть и статические и простые блоки инициализации, так присутствуют и поля.

При попытке создать объект класса Child, происходит следующее:

  1. В порядке объявления, будут проинициализированы статические блоки и статические переменные в родительском классе.
  2. То же самое произойдет в классе потомке
  3. Инициализация в порядке объявления не статических переменных и не статических блоков инициализации в классе Parent
  4. Вызов конструктора Parent
  5. Инициализация нестатических полей и блоков инициализации в классе Child в порядке объявления
  6. Вызов конструктора Child

Вывод будет следующий:

parent static variable
parent static block
child static variable
child static block
parent non static block
parent non static variable
parent contructor
child non static variable
child non static
child contructor