Порядок вызова конструкторов классов в Java

Порядок вызова конструкторов классов в Java

В каком порядке вызываются конструкторы классов, образующих иерархию при ее создании? Например, какой конструктор вызывается раньше: АA() или ВB(), если ВB это подкласс, а АA суперкласс?

В иерархии классов конструкторы вызыва­ются в порядке наследования, начиная с суперкласса и кончая подклассом.

Болеетого, этот порядок остается неизменным независимо от того, используется форма super() или нет, поскольку вызов метода super() должен быть в первом операто­ре, выполняемом в конструкторе подкласса.

Если метод super() не вызывается, то используется конструктор по умолчанию или же конструктор без параметровиз каждого суперкласса.

В следующем примере программы демонстрируется по­рядок вызова и выполнения конструкторов:

Программа выводит следующий результат:

Как видите, конструкторы вызываются в порядке наследования. По зрелом раз­мышлении становится ясно, что выполнение конструкторов в порядке наследова­ния имеет определенный смысл.

Суперклассу ничего неизвестно о своих подклас­сах, и поэтому любая инициализация должна быть выполнена в нем совершеннонезависимо от любой инициализации, выполняемой подклассом. Следовательно, она должна выполняться в первую очередь.

Обучающее видео по теме: