Duvida.. Questao Testkiller  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
Markinhus86
Debugger
[Avatar]

Membro desde: 08/04/2009 10:11:20
Mensagens: 64
Offline

Pq lança essa exceção java.lang.ClassCastException se um Cat pode fazer tudo q um Animal pode fazer?

class Animal {
public String noise() {
return "peep"; } }

class Dog extends Animal {
public String noise() {
return "bark"; } }

class Cat extends Animal {
public String noise() {
return "meow"; } }

Animal animal = new Dog();
Cat cat = (Cat)animal;
System.out.println(cat.noise());
Felagund
GUJ Master
[Avatar]

Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline

A questão é que Dog e cat não tem nenhuma relação.
Eles herdam de animal, mas não são a mesma coisa.

att
Rafael Felix

Rolling With Code
Twitter
[WWW]
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

Markinhus86 wrote:Pq lança essa exceção java.lang.ClassCastException se um Cat pode fazer tudo q um Animal pode fazer?
...
Animal animal = new Dog();
Cat cat = (Cat)animal;
System.out.println(cat.noise());


corroborando com o que o colega acima ja citou...

veja o que esse trecho faz...

ele cria um Dog (um cachorro, que herda de animal)
guarda o Dog em um Animal, ou seja esta usando polimorfismo, para guardar um objeto dog em um supertipo Animal...
depois ele tenta transformar o que esta dentro de "animal", que é um Dog, em um Cat...
O programa verifica que Dog e Cat não tem relação direta um com o outro, e gera uma exceção, avisando que é impossivel transformar
Um Cachorro em um Gato, mesmo os 2 sendo animais, eles não são possivel de transformação...

Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
guilherme.cq
JavaGuru

Membro desde: 21/03/2007 12:52:27
Mensagens: 222
Offline

Alias,


Essa questão caiu ontem na minha prova....

Acertei... mas nao passei...

No TestKiller existem vááááárias questões da prova que fiz.... pena q nao estudei por ele tambem!


Abraços

This message was edited 1 time. Last update was at 13/05/2009 11:51:38

Murl
JavaChild

Membro desde: 03/04/2009 10:34:42
Mensagens: 116
Localização: DF
Offline

Me corrijam se estiver errado, pois também estou aprendendo e inclusive estudando para a prova =)

Acho que uma boa maneira de testar se há possibilidade de realizar um cast é fazer um teste instanceof, certo?
O que eu quero dizer...

SE cat IS-A Dog então posso realizar o cast.

Como neste caso (cat instanceof Dog) é falso, o cast não pode ser realizado!
Certo?

Vlws!

This message was edited 1 time. Last update was at 13/05/2009 21:54:23


OMW to SCWCD;

SCJP 6
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

Murl wrote:Me corrijam se estiver errado, pois também estou aprendendo e inclusive estudando para a prova =)

Acho que uma boa maneira de testar se há possibilidade de realizar um cast é fazer um teste instanceof, certo?
O que eu quero dizer...

SE cat IS-A Dog então posso realizar o cast.

Como neste caso (cat instanceof Dog) é falso, o cast não pode ser realizado!
Certo?

Vlws!


quase isso, quase ... existe so um caso que o cast é permitido, mesmo o instanceOf sendo falso, é quando o valor da variável é nulo...

.... so que vc não poderá realizar esse teste no exame ^^ ...

... mas se passar no teste não falha o cast, porem se não passar e for nulo, o cast é realizado sem lançar exceções ... mas o teste tem q ser realizado para o objeto dentro da variável... por exemplo, neste caso "animal instanceOf Cat" é falso, pois o objeto dentro de animal é um Dog ...

............

e para verificar como é feito o cast...



como vc ve, ele so testa o instanceof, se o objeto não for nulo...





Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
Murl
JavaChild

Membro desde: 03/04/2009 10:34:42
Mensagens: 116
Localização: DF
Offline

Então no caso da variavel ser nula o cast sempre vai acontecer?

OMW to SCWCD;

SCJP 6
rodrigobranas
Smalltalk

Membro desde: 04/06/2004 10:06:33
Mensagens: 4
Offline

NullPointerException

SCJA, SCJP, SCJD (in progress), SCWCD and SCBCD
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team