Класс A
вызывает открытый конструктор f()
в конструкторе. Класс B переопределяет метод f()
с его собственной реализацией.
Предположим, вы intantiate Object B
.. метод f()
объекта B
будет вызываться в конструкторе объекта A
, хотя Object B
не полностью инициализирован.
Может ли кто-нибудь объяснить это поведение?
EDIT: Да, это не рекомендуется. Однако я не понимаю, почему Java не вызывает реализацию f()
базового класса A
вместо того, к реализации f()
производного класса B
.
Код:
class A {
A() {
System.out.println("A: constructor");
f();
}
public void f() {
System.out.println("A: f()");
}
}
class B extends A {
int x = 10;
B() {
System.out.println("B: constructor");
}
@Override
public void f() {
System.out.println("B: f()");
this.x++;
System.out.println("B: x = " + x);
}
}
public class PolyMethodConst {
public static void main(String[] args) {
new B();
}
}
Вывод:
A: constructor
B: f()
B: x = 1
B: constructor