[RESOLVIDO] Dúvida - Questão Test Killer

5 respostas
henriqueluz

Olá amigos, tem-se o seguinte código:

class Foo {
        public int a = 3;
        public void addFive() {
                 a += 5;
                 System.out.print("f ");
        }
}
 
class Bar extends Foo {
        public int a = 8;
        public void addFive() {
                this.a += 5;
                System.out.print("b " );
 
        }      
}
 
Foo f = new Bar();
f.addFive();
System.out.println(f.a);

Gostaria que alguém pudesse me explicar por que a saída é “b 3”.
A referência f aponta para uma objeto Bar, então f.a não deveria ser o a da classe Bar?
Acredito que tenha algum conceito envolvido que eu não esteja me recordando…

Obrigado!

5 Respostas

fernandoabcampos

Vamos lá:

Foo f = new Bar();
f.addFive();

Neste ponto, o addFive() que entra é o da classe Bar, logo, imprimirá o “b”. Após isto, na continuação da execução após o retorno do addFive(), o trecho abaixo é executado:

Aqui, o f aponta para uma instância que foi tipada com a classe Foo - apesar de ser instânciada (usando o Polimorfismo) para uma classe Bar, e, assim sendo, ele pega o atributo a desta classe em que foi tipada (Foo). Lembrando que:

class Foo {  
        public int a = 3;  
...

Ajudou a ficar um pouco mais claro?

Att
Fernando Antonio Barbeiro Campos

henriqueluz

Oi Fernando,

Valeu pelas explicações.
Até a impressão do b eu já sabia que era assim que acontecia, minha dúvida mesmo era essa do valor do f.a
Eu achava que por ser instanciada como um Bar ela seria a variável da classe Bar.

Pergunta Final: Isso significa que as variáveis de instância sempre serão as da referência e os métodos serão os do objeto instanciado?

Valeu!

MaYaRa_SaN

por que não existe sobrescrita para atributos, somente para métodos

:wink:

henriqueluz

Boa Mayara,
Com essa dica ficou bem claro.

Obrigado galera!

fernandoabcampos

Olá henriqueluz, a Mayara foi bastante eficiente na resposta.

Inclusive, só pra acrescentar, se vc fizer um debug, vai verificar que existirá algo similar a situação da imagem (a existência de 2 atributos a - cada um com seu devido escopo e sua classe específica).


Criado 28 de outubro de 2011
Ultima resposta 28 de out. de 2011
Respostas 5
Participantes 3