Inicialización en polimorfismo de variables.

Supongamos que tiene el siguiente código

class A {
    int i = 4;

    A() { 
        print();
    }

    void print () {
        System.out.println("A");
    }
}

class B extends A {
    int i = 2;              //"this line"

    public static void main(String[] args){
        A a = new B();
        a.print();
    }

    void print () {
        System.out.println(i);
    }
}

esto imprimirá 0 2

Ahora, si elimina la línea etiquetada "esta línea", el código se imprimirá 4 4

Entiendo que si no hubiera int i = 2; línea,

A a = new B(); llamará a la clase A, inicializa i como 4, llama al constructor,
que le da control aprint() método enclass By finalmente imprime 4.

a.print() llamaráprint() método en la clase B porque los métodos se vincularán en tiempo de ejecución, que también utilizará el valor definido en la clase A, 4.

(Por supuesto, si hay algún error en mi razonamiento, hágamelo saber)

Sin embargo, lo que no entiendo es si hay int i = 2.

¿por qué si inserta el código, la primera parte (crear objeto) imprimirá de repente 0 en lugar de 4? ¿Por qué no inicializa la variable como i = 4, sino que asigna un valor predeterminado?

Respuestas a la pregunta(3)

Su respuesta a la pregunta