Что не так: вы вызываете метод foo
в конструкторе A
, но в тот момент, когда вы его вызываете, объект еще не полностью построен. Конструктор B
еще не выполнен, поэтому bar
по-прежнему имеет значение по умолчанию null
. Это демонстрирует, почему плохая идея вызывать неконечные методы экземпляра из конструктора.
Компилятор Java не предупреждает об этом - он предупреждает о некоторых конструкциях, но первой целью компилятора является компиляция вашего кода, на самом деле это не очень сложный инструмент для анализа кода.
Вы можете использовать инструмент статического анализа кода, например FindBugs или PMD , чтобы найти подобные проблемы в своем коде.