Eu queria tirar uma dúvida com relação ao upcasting e downcasting.
package core.java.volume.um.polimorfismo;
public class Empregado {
public String nome;
public int salario;
public Empregado(String nome, int salario){
this.nome = nome;
this.salario = salario;
}
public String getNome(){
return "";
}
public int getSalario(){
return 1;
}
}
package core.java.volume.um.polimorfismo;
import java.util.ArrayList;
import java.util.List;
public class Gerente extends Empregado {
List<Empregado> lista;
public Gerente(String nome, int salario){
super(nome, salario);
lista = new ArrayList<Empregado>();
lista.add(this);
lista.add(new Empregado("Carlos", 1000));
lista.add(new Empregado("Maria", 500));
Empregado e1 = lista.get(0);
Gerente g1 = (Gerente)lista.get(0);
Gerente g2 = (Gerente)lista.get(1);
}
public void metodoNovo(){
//faça algo
}
}
(1) Na linha 21, uma variável do tipo Empregado recebe uma referência para Gerente. Nesse caso, ocorre um downcasting implícito. Só acesso os métodos que são herdados em Gerente.
(2) Na linha 23, uma variável do tipo Gerente recebe uma referência para um objeto Gerente. Porém, ArrayList é do tipo Empregado. Então, é retornado um objeto Empregado, que aponta para Gerente. Para compatibilização, faço um upcasting explícito. Agora, acesso os métodos novos presentes em Gerente.
(3) Na linha 25, uma variável do tipo Gerente recebe uma referência para um objeto Empregado (pois ArrayList é do tipo Empregado) que referencia um objeto Gerente. Como g2 está recebendo um Empregado, devo fazer um upcasting explícito.
Está certo o que afirmei em 1, 2 e 3?


