Обратитесь к коду Java ниже:
class Base{
Base(){
System.out.println("Base Constructor");
method();
}
void method(){}
}
class Derived extends Base{
int var = 2;
Derived(){
System.out.println("Derived Constructor");
}
@Override
void method(){
System.out.println("var = "+var);
}
}
class Test2{
public static void main(String[] args) {
Derived b = new Derived();
}
}
Выводимый результат:
Base Constructor
var = 0
Derived Constructor
Я думаю, что var = 0 возникает, потому что исходный объект имеет половину инициализации; похоже на то, что Джон Скит говорит здесь
Мои вопросы:
Почему метод overridden вызывается, если объект класса Derived еще не создан?
В какой момент времени задано значение var 0?
Существуют ли случаи, когда такое поведение желательно?