Duvida sobre herança

5 respostas
P

Olá galera estou estudando pra proca SCJP

e parece que estou entendo herança conforme exemplo abaixo pois quando estou entendo como usa a formas de instanciar
o objeto e ler os metodos do pai e do filho .
Ai aparece varios formas de instanciar e fico sem entender…

Gostaria de entender como faço pra ler do pai para filho e a forma que tem que ser para visualizar um codigo e ter a certeza que
estou lendo certo , que pode ou não pode…Se alguém puder me ajudar agradeceria…

Tem alguma receita como :(só essas são corretas) gostaria de saber uma receita de como é correto???

Animal a = new Dog();

Dog d = new Dog();

Dog d1 = (Dog) a;

quando uso o comando :

Animal a = new Dog(); //vejo o metodo Animal//ok

Dog d1 = new Dog(); //vejo o metodo Animal e Dog
d1.doAnimalStuff(); //compila e executa -ok
d1.doDogStuff();//compila e executa -ok


Dog d = (Dog) a;
d.doAnimalStuff(); //compila e executa ok
d.doDogStuff(); //compila e executa ok


Dog d2 = new Animal(); //não compila pois filho não ve o pai

mas fazendo Dog d2 = (Dog) new Animal(); //compila mas da erro

d2.doDogStuff()

d2.doAnimalStuff();

Exception in thread main java.lang.Error: Unresolved compilation problem:

Syntax error, insert ; to complete Statement
at certificacao.licão_5_1.Dog.main(Dog.java:21)

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.doAnimalStuff();          //compila mas da erro
		d.doDogStuff();             //compila mas da erro
		
	    	
	} 
}

5 Respostas

GustavoLaguna

Bom, quanto ao código postado, ele compila e não da erro não.

Ele não da erro por causa dessa linha

Se fosse

Ai sim daria…

LPJava

http://camilolopes.wordpress.com/

faça o download do segundo resumo, que está no final do post, nesse resumo tem exemplos la bem explicando macetes de como vc entender essa parte… dar uma olhada… :smiley:

rmala_ti
<blockquote> mas fazendo Dog d2 = (Dog) new Animal(); //compila mas da erro

d2.doDogStuff()

d2.doAnimalStuff();

Exception in thread main java.lang.Error: Unresolved compilation problem:

Syntax error, insert ; to complete Statement

at certificacao.licão_5_1.Dog.main(Dog.java:21)

Bom Dia!
No capítulo 2, +/- pag 70, é dito que o compilador só sabe que os objetos pertencem a uma mesma árvore de herança. Então como neste caso Dog estende Animal, o compilador não acusa erro, pois Dog é-um Animal.
O erro só é encontrado no tempo de execução, pois está tentando usar uma referência do subtipo (Dog) para acessar um objeto do supertipo (Animal).
Como é dito no livro, o compilador só não permitirá coisas que realmente não tem nada a ver, como o exemplo abaixo:

Neste caso, uma String nunca poderá ser um Animal, então o erro ocorre em tempo de compilação.
Pelo que entendi é isso.
Espero ter ajudado.

victorwss

Bem, você deve estar usando alguma IDE feita em java que invocou o compilador e deu esse erro por causa do erro de compilação.

Como a mensagem diz, coloque o ponto-e-vírgula.

d2.doDogStuff()   // &lt;--- ESTÁ SEM O PONTO-E-VÍRGULA!!!!!
rmala_ti
<blockquote><div class="quote-author">victorwss:</div><blockquote>

mas fazendo Dog d2 = (Dog) new Animal(); //compila mas da erro

d2.doDogStuff()

d2.doAnimalStuff();

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

Syntax error, insert ";" to complete Statement

at certificacao.licão_5_1.Dog.main(Dog.java:21)

Bem, você deve estar usando alguma IDE feita em java que invocou o compilador e deu esse erro por causa do erro de compilação.

Como a mensagem diz, coloque o ponto-e-vírgula.

d2.doDogStuff() // &lt;--- ESTÁ SEM O PONTO-E-VÍRGULA!!!!!

Com certeza tá faltando o ponto-e-vírgula, mas acho que não é esta a dúvida do amigo.
Mesmo colocando o ponto-e-vírgula, temos a mensagem de erro, como eu havia anteriormente.

Exception in thread “main” java.lang.ClassCastException: Animal cannot be cast to Dog
at Cast.main(Cast.java:23)

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