Полиморфный метод в конструкторе (Java)

Класс 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
11
задан lukuluku 3 February 2012 в 04:52
поделиться