构造函数(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

问题答案:

您是对的,这就是它的工作方式。但是不建议您这样做,因为从您的班级继承的人可能会无意间破坏它。