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

Herança, polimorfismo e a instanciação de objetos

Durante uma das aulas me surgiu uma dúvida. Se eu declaro ContaCorrente cc = new ContaCorrente(); o método que tem como parâmetros boolean transfere(double valor, Conta conta) aceita esse objeto. Então porque eu declararia Conta cc = new ContaCorrente();, se assim eu perco acesso aos métodos únicos do objeto conta corrente?

3 respostas

Oi Dayse

A ideia de fazer Conta cc = new ContaCorrente(); é o polimorfismo: o conceito abstrato de lidar com vários tipos de maneira uniforme, e as interfaces são uma forma de implementar esse conceito. O código que interage com uma interface pode interagir com qualquer tipo que forneça essa interface. Em outras palavras, você pode utilizar "Conta" para referenciar vários tipos de objetos diferente como por ex: ContaCorrente, ContaPoupança, ContaConjunta, etc...Se você precisar de um método que só tenha em ContaCorrente você terá que fazer o cast de Conta para ContaCorrente

Ainda não ficou bem claro. Quando eu façoConta cc = new ContaCorrente(); a intenção é apenas exaltar que cc é uma Conta e portanto pode ser utilizada pelo método?

solução!

A intenção de usar Conta é você poder atribuir ContaCorrente ou qualquer outro tipo que seja filho de Conta. O polimorfismo permite codificar para uma interface/classe abstrata (no exemplo: Conta) que reduz o acoplamento, aumenta a reutilização e facilita a leitura do código. Polimorfismo significa formas diferentes. O conceito básico de uma classe abstrata é que ela pode apenas declarar um método abstract sem fornecer a implementação para eles. Uma subclasse que estende uma classe abstrata fornece sua própria implementação para esses métodos abstratos. Métodos em uma classe abstrata são implementados em diferentes formas pelas subclasses que estendem uma classe abstrata. Ou seja, usando uma referência em Conta você pode chamar o método abstrato deposita sem se preocupar em saber realmente qual método deposita de qual classe filha vai ser chamada. O "lado ruim" é que se você precisar chamar um método que só exista na classe filha você precisará fazer o cast para ContaCorrente, por exemplo.