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

Dúvida no Ex. 8 da Aula 3 - Diferencie tipo de uma referência e tipo de um objeto

package financeiro;
    public class ContaFinanceira extends modelo.Conta {
        public void fecha() {
            System.out.println("fechando financeiro");
        }
    }

    package modelo;
    public class Conta {
        public void fecha() {
            System.out.println("fechando conta normal");
        }
    }

    package codigo;
    import financeiro.*;
    import modelo.*;
    class A {
        public static void main(String[] args) {
            Conta c = new ContaFinanceira();
            c.fecha();
        }
    }

Olá pessoal, não consigo entender a resposta desse exercício, por favor, alguém conseguiria me dar uma explicação passo-a-passo? No meu entender se a variável que aponta para um objeto do tipo ContaFinanceira é do tipo Conta, ela me daria acesso apenas a métodos existentes no objeto Conta. Nesse caso ao meu ver o resultado deveria ser a impressão do método fecha() na classe Conta. Muito obrigado por quem se dispor a me fazer enxergar o contrário!

2 respostas
solução!

Olá Fernando tudo bem? Vou tentar explicar passo a passo aqui =) Como pode ver ContaFinanceiraé filha de Conta, dessa forma é possível fazer uso do polimorfismo fazendo atribuição dessa forma: Conta c = new ContaFinanceira(); No entanto o objeto que foi instanciado foi uma ContaFinanceira sendo que nele contem também o método fecha() que foi reescrito da classe mãe, Conta. Quando você chama o método fecha() ele vai chamar o método da classe filha ContaFinanceira.

Consegui te ajudar?

Oi Thiago, obrigado pela explicação! É que pra mim ele iria pegar o método da referência que é do tipo Conta e não do objeto instânciado que é do tipo ContaFinanceira. Entedi agora que devemos olhar então o tipo de objeto na memória e não a referência. Abraço!