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

Duvida no ex. 1 aula 4 - Herança

Bom dia, Gostaria de saber qual a diferença entre instanciar uma conta desta forma:

ContaPoupanca conta = new ContaPoupanca();

e desta forma:

Conta conta = new ContaPoupanca();

As duas formas funcionam e código compila perfeitamente, mas eu gostaria de saber qual a diferença entre uma e outra. Desde já agradeço a atenção.

3 respostas
solução!

Olá Wesley, tudo bem?

Fazer

Conta conta = new ContaPoupança();

é o que nos chamamos em orientação a objetos de polimorfismo (https://goo.gl/diFliK (leitura recomendada)), e uma das vantagens de se utilizar hierarquias de Herança e/ou criar interfaces.

Como criamos uma hierarquia de herança, podemos dizer que ContaPoupanca é uma Conta. Isso significa que podemos criar um objeto de um subtipo (ContaPopanca) e ele ser referenciado por uma variável de um supertipo (Conta). Isso ocorre justamente porque ContaPoupanca é uma Conta. Por isso dizemos que o relacionamento de herança é do tipo é-um.

A vantagem de usar o supertipo é que podemos trocar a implementação (subtipo) a qualquer momento sem quebrar o código que funciona. Isso significa que o seguinte trecho código deve funcionar:

Conta conta = new ContaPoupança();
conta = new ContaCorrente();

Pois conta pode referenciar qualquer objeto que seja de uma classe filha de Conta. Aqui talvez a vantagem não apareça, mas imagine o seguinte método:

public void fazAlgumaCoisa(Conta conta) 
{
    conta.deposita(10);
}

Agora somos capazes de passarmos qualquer objeto mais específico, por exemplo:

fazAlgumaCoisa(new ContaPoupanca());
fazAlgumaCoisa(new ContaCorrente());

Não ficamos presos a um tipo de conta específico. Talvez as vantagens de programar dessa forma não apareçam pra você nesse momento. Mas no geral é uma boa prática generalizar as coisas.

As vantagens e desvantagens de usar herança e etc, também devem se tornar mais claras a medida que for evoluindo nos conceitos de orientação a objetos. :)

Faz sentido? Se tiver mais dúvida pode avisar.

Abraço.

Olá Lucas,

Muito obrigado, a sua resposta ajudou a clarear as minhas ideias. Vou ler o link que você indicou e dar prosseguimento nas minhas aulas. Obrigado novamente.

Oi Wesley, por nada!

Qualquer dúvida que tiver no seu processo de aprendizado você pode (eu diria até mesmo que deve!) abrir uma nova discussão para sanar suas dúvidas! :)

Um abraço e bons estudos.