2
respostas

Dúvida no exercício 5: Qual é a vantagem?

No exercício 5 do curso Java 2: Orientação a Objetos, quando o assunto é sobre declarar uma referência à uma subclasse usando o tipo menos específico, ele pergunta "Compila? Roda? O que muda? Qual é a utilidade disso?

Porém, na "Opinião do Instrutor" não é explicada a utilidade, então gostaria de saber com mais detalhes a utilidade, se alguém puder me explicar eu agradeço.

2 respostas

Bom dia Arthur, no caso você gostaria de saber a vantagem de referenciar um objeto com um tipo de uma superclasse dele correto? Então quando fazemos isso estamos usando o polimorfismo. Por exemplo, temos uma classe ContaCorrente que herda de Conta, assim podemos criar um objeto ContaCorrente de duas maneiras:

Conta c = new ContaCorrente();
ContaCorrente cc = new ContaCorrente();

Isso ocorre porque ContaCorrente é uma ContaCorrente e também é uma Conta, e sobre sua maior vantagem é que, imagine um método que irá receber uma ContaCorrente e imprimir o valor dela:

public void imprimir(ContaCorrente cc) {}

Agora temos outro tipo de Conta que é a ContaPoupanca e também precisamos imprimir seu valor:

public void imprimir(ContaPoupanca cp) {}

temos dois métodos para fazer a mesma coisa, logo como Ambos são Conta, podemos fazer nosso método receber Conta e dependendo o tipo de conta que passarmos o compilador sabe se deve chamar a ContaCorrente ou a ContaPoupanca:

public void imprimir(Conta conta) {}

Isso é o polimorfismo!

Espero ter ajudado.

Abraços.

Tive a mesma dúvida e encontrei esse tópico falando do assunto.

Eu entendi que a assinatura do método, ao utilizar como parâmetro uma referência à superclasse permite que as subclasses possam sem referenciadas...

public void roda(Conta c) {

Apesar de ter entendido o conceito explicado, continuo com a seguinte dúvida:

No exercício há a proposta da seguinte mudança no código:

De:

Conta c = new Conta();
ContaCorrente cc = new ContaCorrente();
ContaPoupanca cp = new ContaPoupanca();

Para:

Conta c = new Conta();
Conta cc = new ContaCorrente();
Conta cp = new ContaPoupanca();

Considerando que o programa executou sem erros e teve o mesmo resultado nas 2 formas, qual a real necessidade de fazer a mudança sugerida no tipo dos atributos c, cc e cp?