Я не уверен, но я предполагаю, что причина здесь в том, когда инициализируется переменная экземпляра.
Конструктор подкласса неявно вызывает конструктор суперкласса.Я переписываю конструктор класса B следующим образом:
public void B()
{
super();
System.out.println(name);
}
Выполнение оператора super()
, поток кода переходит к конструктору класса A. Выполнение оператора a()
в конструкторе класса Aперейдет к методу a()
класса B из-за полиморфизма.В настоящее время переменная name
класса B еще не инициализирована, поэтому она выводит ноль (значение по умолчанию для переменной String).
После завершения оператора super()
теперь инициализируется переменная name
.Насколько я знаю, переменной экземпляра будет присвоено значение после вызова super()
.Затем в следующем операторе println
он напечатает строку, которую мы присвоили name
.Ваш исходный код не имеет оператора println
, поэтому он печатает только null
.