Я просто предоставил ссылку, так как я не очень хорошо информирован по этому вопросу. См. здесь для учебника, в котором рассказывается о порядке вызова конструкторов.
Наиболее заметная цитата в конце страницы, связанная с описываемой вами ситуацией, такова:
blockquote>
- Вызывается конструктор базового класса. Этот шаг повторяется рекурсивно, так что сначала формируется корень иерархии, а затем следующий производный класс и т. Д. До тех пор, пока не будет достигнут наиболее производный класс.
- Инициализаторы членов вызываются в порядке декларации. Вызывается тело конструктора производного класса.
Итак, как вы показали в своем примере, базовый класс инициализируется, затем каждый из следующих классов и, наконец, инициализируются переменные-члены.
Но, как упоминалось в Билле, это не очень хорошая практика. Следуйте тому, что говорит Билл. У него больше репутации, чем у меня.
EDIT: для более полного ответа см. этот ответ Джона Скита . Ссылка в этом ответе сломана, и только PDF-копию JLS можно найти AFAIK. Здесь - копия JLS в формате .pdf. Соответствующий раздел - Раздел 8.8.7.1. Существует объяснение того, что в этом ответе используется порядок вызова конструктора.