Dúvida Livro Kathy Sierra

7 respostas
Vecchiato

Na sessão <ou seria seção> Conversão de Variáveis de Referência mais precisamente pag 70 do livro em PT e 115 no livro em EN
é dito que:

Animal a = new Dog(); //imagine que Dog é uma subclasse de Animal Dog d = (Dog) a; a.doDogStuff(); //o método doDogStuff é um método apenas da subclasse

Pode ser substituido por:

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

Bom o código de baixo eu concordo que funcione, porém o código de cima eu fui rodar e o compilador acusa que o objeto a não conhece o método doDogStuff visto que ele referencia a classe Animal. O certo não seria d.doDogStuff(); na terceira linha do primeiro código?

Grato pela ajuda.

7 Respostas

LPJava

o metodo pertence a que classe? a pai ou filho? lembre-se da regra o filho faz tudo que o pai faz… entao vc so pode chamar no filho aquilo que o pai tem.

poe todo o codigo ai…

S

doDogStuff() foi declarado em Dog,

a classe pai não pode ver oque foi declarado na classe filha…

Vecchiato

No livro não mostra todo o código,
mas pelo que eu entendi:
O primeiro tentaria chamar o método doDogStuff() da superclasse (Animal)
O segundo tentaria chamar o método doDogStuff() da subclasse (Dog)

eles seria iguais se fossem assim:

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

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

Pq dai ambos tentariam chamar o método doDogStuff() da subclasse (Dog) certo?

;)~

Foxlol

O livro é claro e diz:

a.doDogStuff();

NÃO irá funcionar!!!

Pelo menos na minha versão :smiley:

Foxlol

Alias o seu também diz:

A subclasse de Animal, ou seja DOG.

Preste mais atenção ao ler.

Flw

anderson.bonavides

Vecchiato:
No livro não mostra todo o código,
mas pelo que eu entendi:
O primeiro tentaria chamar o método doDogStuff() da superclasse (Animal)
O segundo tentaria chamar o método doDogStuff() da subclasse (Dog)

eles seria iguais se fossem assim:

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

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

Pq dai ambos tentariam chamar o método doDogStuff() da subclasse (Dog) certo?

;)~

Bem to sem a JVM aki pq deu problema mas axo q vai dar ClassCastException. Axei desde q bati o olho pq vc está tentando converter a classe “a” que é do tipo Animal em um tipo Dog que é sub-classe. Pode fazer Cast do pai pro filho mas do filho pro pai axo que da ClassCastException.

Listei um tipo de exceção em um pequeno matérial sobre exceções em um outro tópico ai.

Marcio_Nogueira

O código não irá compilar, pois você está tentando criar uma instância da sub classe utilizando a super classe para isso.

Criado 16 de novembro de 2007
Ultima resposta 17 de nov. de 2007
Respostas 7
Participantes 6