Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida Polimorfismo

Ao executar o código abaixo, verão que a saída dele é:

A 44 4 44 A 44 44 44

O meu questionamento é sobre o por quê do primeiro 4 na segunda linha.

O atributo h da classe Baap não é estático, logo no meu entendimento, o "h" a ser referenciado deveria ser do objeto A (44).

class Baap{

    public int h=4;

    public int getH(){
        System.out.println("Baap "+h);
        return h;
    }

}

public class A extends Baap {     

    public int h=44;

    public int getH(){

        System.out.println("A "+h);
        return h;
    }

    public static void main(String[] args) throws Exception {                   

        Baap b = new A();
        System.out.println(b.h+" "+b.getH());
        A bb = (A)b;
        System.out.println(bb.h+" "+bb.getH());

    } 

}
3 respostas

Desculpe, a saída ficou mal formatada. Agora está correto.

A 44
4 44
A 44
44 44
solução!

Bem observado Anderson.

A questão é que, diferente da resolução de nomes de forma dinâmica, que acontece com métodos (a chamanda invocação virtual de métodos), o mesmo não acontece para parâmetros, que são estaticamente (isso é, em tempo de compilação) decididos.

Então se você fazer variável.atributo, ele sempre vai devolver o atributo referente ao tipo que a variável foi declarada, nesse caso do tipo Baap.

Muito obrigado Paulo. A resposta foi bem clara.