1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Referência a um obj

Na apostila da caelum java-poo, na parte de herança e polimorfismo, pág. 104 a 106 ela faz isso:

Exe.1:

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

Depois, faz isso daqui:

Exe.2:

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

para demonstrar que podemos declarar uma var. de um tipo menos específico (Conta) do que realmente o obj é (ContaCorrente/ContaPoupanca). E que isso funciona e chamaria os mesmos métodos, por conta das variáveis referenciarem os mesmos tipos de objetos que referenciaram no exemplo 1. Mas aí em seguida afirma que não importa como nos referimos a um objeto, o método que será invocado será sempre o mesmo. Sim, os métodos invocados foram os mesmos.

Mas ainda não consigo concordar com essa afirmação. Eu só consigo concordar, se ele se refere ao tipo da variável; que não importa como referimos (declaramos) o tipo da variável, o método que será chamado será o mesmo, pois o tipo do objeto referenciado do Exe.2 é o mesmo que o do exemplo anterior. Ainda continuo achando estranha essa afirmação.

As classes e os métodos:

public class Conta{

public void atualiza(double taxa){
        this.saldo += this.saldo * taxa;
    }
}
public class ContaCorrente extends Conta{

    @Override
    public void atualiza(double taxa){
        this.saldo += this.saldo * taxa * 2;
    }
public class ContaPoupanca extends Conta{
    @Override
    public void atualiza(double taxa){
        this.saldo += this.saldo * taxa * 3;
    }
}

Mais uma vez, o que eu questiono é a afirmação: "não importa como nos referimos a um objeto, o método que será invocado será sempre o mesmo" e não os métodos que são chamados.

O parágrafo inteiro dessa afirmação: É extremamente importante perceber que não importa como nos referimos a um objeto, o método que será invocado é sempre o mesmo! A JVM vai descobrir em tempo de execução qual deve ser invocado, dependendo de que tipo é aquele objeto, não importando como nos referimos a ele.

  • Sobre que assunto a lição está explicando? Sem saber em que contexto está a frase fica difícil de entender.

    Roger75   08 de mar de 2015
  • verdade Roger75

    Jfestrela Cestrela   08 de mar de 2015
  • sobre polimorfismo e herança. Apostila da caelum: java poo, pág. 107.

    Kakarotto   08 de mar de 2015
  • No caso que eu apresentei, c1 é do tipo Conta e faz referencia ao obj ContaCorrente. Não consigo concordar com "não importa como nos referimos a um objeto". Provavelmente eu que não consegui interpretar dentro do contexto.

    Kakarotto   08 de mar de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java orientação-a-objetos ou faça a sua própria pergunta.