E ai pessoal, blz?
Bom, antes de tudo, eu já procurei aqui no GUJ e não encontrei nenhum tópico que sanasse todas minhas dúvidas.
Bem, estou meio incerto quanto ao funcionamento do Casting no Java, e vou mostrar o porque.
Bem, eu sei que todo UPCAST é possível, ou seja: implicita ou explicitamente, toda conversão de um SUBTIPO para um SUPERTIPO irá funcionar.
Agora, o que tá fazendo nasce Urugutango fica pendurado no meu galho é o DOWNCAST.
Vamos considerar esta Herança:
class Animal {
public void Comer(){
System.out.println("Comendo");
}
}
class Cachorro extends Animal {
public void balancandoRabo(){
System.out.println("Balança Fio de Deus!");
}
}
Agora temos o seguinte código:
Animal a = new Cachorro();
Cachorro b = new Cachorro();
b = (Cachorro)a;
b.balancandoRabo();
Beleza, o Cast Funciona! Porque? Porque nós temos um Objeto Cachorro em uma variavel de referencia Animal, e o casting funciona!
Mas, porque quando eu faço isso:
b = a;
O código não compila?
Eu estou tentando atribuir um objeto Cachorro, numa variavel de referencia Animal, em uma variavel de Referencia Cachorro, que é a mesma coisa que eu fiz em cima, só que sem o casting.
A questão é: o compilador verifica a referencia ou o objeto? Porque nesse exemplo, ele fez os dois.
Eu sei tambem que quando você faz um Casting, ele não verifica em tempo de compilação, mas sim em tempo de Execução, mas verifica o que: a referencia ou o objeto?
Não sei aonde eu estou me perdendo, mais me ajuda ai, galera, ficou confuso...
Valew!