构造函数(Java)中的多态方法
问题内容:
类在构造函数中A
调用public方法f()
。B类f()
使用其自己的实现覆盖方法。
假设您实例化了Object B
.. Object的方法将在Object的构造方法f()
中B
调用A
,尽管Object B
没有完全初始化。
谁能解释这种行为?
编辑: 是的,不建议这样做。.但我不明白 为什么 Java不调用f()
base-
Class的实现,A
而不是“f()
派生”到派生Class的实现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
问题答案:
您是对的,这就是它的工作方式。但是不建议您这样做,因为从您的班级继承的人可能会无意间破坏它。