Inicialização no polimorfismo de variáveis
Suponha que você tenha o seguinte 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);
}
}
isso imprimirá 0 2
Agora, se você remover a linha "this line", o código será impresso 4 4
Eu entendo que se não houvesse int i = 2; linha,A a = new B();
chamará a classe A, inicializa i como 4, construtor de chamada,
que dá controle sobreprint()
método emclass B
e, finalmente, imprime 4.
a.print()
chamaráprint()
na classe B porque os métodos serão vinculados no tempo de execução, que também usará o valor definido na classe A, 4.
(Obviamente, se houver algum erro no meu raciocínio, me avise)
No entanto, o que eu não entendo é se existe int i = 2.por que, se você inserir o código, a primeira parte (criando o objeto) imprimirá 0 repentinamente 0 em vez de 4? Por que ela não inicializa a variável como i = 4, mas atribui o valor padrão?