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…
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:
classFoo {
publicinta = 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
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).