Exemplo de Casting - Kathy Sierra

10 respostas
GustavoLaguna
Animal a = new Dog();
Dog d = (Dog) a;
a.doDogStuff();

Levando em consideração que Dog extends Animal e Animal não possui o método doDogStuff. Esse exemplo não geraria um erro?

No Livro está escrito que o código acima pode ser substituido por este

Animal a = new Dog();
((Dog)a).doDogStuff();

Fiquei na duvida, mas acho que no primeiro código ele vai procurar na classe Animal e ver que não existe o método portanto msm sendo um objeto Dog ele não vai compilar. Já no seundo ele faz o casting para Dog e dps usa o método.

Fico na espera da ajuda ae galera, abraço

OBS: Estou lendo no computador de arquivos puxados pela internet, são dois arquivos e os dois estavam iguais. Mas pode ocorrer de no livro estar diferente! Portanto, quem tiver o livro e puder verificar… seria de grande ajuda.

10 Respostas

B

Ola,

Se a classe Animal não tiver o metodo doDogStuff() o primeiro exemplo dará erro de compilação, na certa.

GustavoLaguna

E o segundo não né? Hum… legal! Agora é só esperar para ver se alguém com o livro tira a dúvida se é erro do livro ou erro do meu arquivo! :slight_smile:

Página 115!

B

Ola

Dá uma olhada no site do livro… lá tem umas correções pós edição.

P

Olá ,

fiz o exemplo e precisa fazer o CAST para ver o metodo da classe Dog

pois a referencia do Animal não deixa ver o metodo do Dog.

[code]

public class Animal {

}

//

public class Dog extends Animal {
void doDogStuff(){
System.out.println("Dog");
}
}

//

public class DogTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal a = new Dog();
Dog d = (Dog) a;
((Dog) a).doDogStuff();

}

}

LPJava

qual a sua edicao? se for a edicao 1, realmente está com erro… mais na edicao 2 que saiu correcoes… agora se a superclass nao tem o metodo realmente nao tem como compilar ja que tem a regra: “o filho faz no minimo tudo que o pai faz, se o pai tem esse metodo o filho tb nao”

flw!

Javabuntu

esse erro foi de digitação mesmo…

Animal a = new Dog(); Dog d = (Dog) a; a.doDogStuff();

na verdade ele queria dizer:

Animal a = new Dog(); Dog d = (Dog) a; d.doDogStuff();

o exemplo de cast, agora a variável d chama o método… e tudo certo…apenas isso ok…

GustavoLaguna

Valeu!

P

Uma duvida por que ???

Exception in thread “main” java.lang.ClassCastException: certificacao.licão_5_1.Animal
at certificacao.licão_5_1.Dog.main(Dog.java:18)

public class Animal {
	void doAnimalStuff(){
		 System.out.println("Animal");
		 } 
}
public class Dog extends Animal {
	 void doDogStuff(){
		 System.out.println("Dog");
		 } 
	 
	 public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal a = new Dog(); //vejo o metodo Animal
		
		Dog d = (Dog) a;
		
		d.doDogStuff();  //vejo metodo Animal e Dog
		
		Dog d1 = new Dog(); //vejo o metodo Animal e Dog
		
		Dog d2 = (Dog) new Animal(); //vejo o metodo Animal e Dog
		d2.doAnimalStuff();          //compila mas da erro
		d2.doDogStuff();             //compila mas da erro
		
		
		
	    	
	} 
}
B
Opa.. vamos com muita calma..
#         Dog d2 = (Dog) new Animal(); //vejo o metodo Animal e Dog  
#         d2.doAnimalStuff();          //compila mas da erro  
#         d2.doDogStuff();             //compila mas da erro
Errado, pense assim... Dog é um animal mais alguma coisa... agora, não se pode, de forma alguma fazer:
Dog d2 = (Dog) new Animal(); //vejo o metodo Animal e Dog
Javabuntu
Dog d2 = (Dog) new Animal();

existe uma regra, o tipo de referência tem que ser igual ou pai, NUNCA filho....

poderia ser
Animal d2 = new Animal();
NaoHumano = new Animal(); // suponha que Animal extends NaoHumano
Object d2 = new Animal();

entendeu... nunca uma referência filho pode apontar pra um ojbeto pai... somente o contrário ok...

Criado 3 de abril de 2008
Ultima resposta 3 de abr. de 2008
Respostas 10
Participantes 5