Класс A
вызывает общедоступный метод f ()
в конструкторе. Класс B переопределяет метод f ()
своей собственной реализацией.
Предположим, вы вводите объект B
.. метод f ()
объекта B
будет вызываться в конструкторе объекта A
, хотя объект B
не полностью инициализирован.
Кто-нибудь может объяснить такое поведение?
РЕДАКТИРОВАТЬ: Да, это не рекомендуется ... но я не понимаю , почему 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