Qual a vantagem disso?[RESOLVIDO]

Olá,

Se uma classe implementa uma interface ou estende outra classe, qual a vantagem se criar uma variável com tipo da interface ou superclasse já que implementando e estendendo já possuo acesso aos atributos e métodos?

Ex.:

public class Pessoa {}

public class Empregado extends Pessoa {}

public EmpregadoTeste {
private Pessoa empregado;

//Por que não criar assim
private Empregado empregado;
}

Uma utilização comum que vejo é nas Collections.

Grato.

Nessa situação que você descreveu, geralmente não tem vantagem mesmo.

Mas tem em outras:

  1. Métodos fábrica: Eles permitem que em um ponto do seu sistema saiba qual é a pessoa específica seja criada, mas que no resto do seu sistema, isso seja indiferente:

public Pessoa carregarPessoa() { //Aqui decide que tipo de pessoa criar e retornar }

  1. Criação de métodos para lidar com qualquer Pessoa:

[code]public double calcularAumento(Pessoa empregado) {
//Calcula o aumento de qualquer empregado
}

//Formas que poderia ser chamado
calcularAumento(pessoa);
calcularAumento(empregado);
[/code]

  1. Separar a implementação específica do uso. Veja uma descrição mais detalhada aqui:
    http://www.guj.com.br/java/55387-duvida-basica-sobre-oo---instancias-#290673

Entendi.
Obrigado!