Versão atual:

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.

Versões(3):

Ver a versão formatada

Referência a um obj

Comentário

new question