| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2009 10:32:33
|
Markinhus86
Debugger
![[Avatar]](/images/avatar/5dec1dd9c7ca4454ec07671f1bc8f941.jpg)
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());
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2009 10:38:15
|
Felagund
GUJ Master
![[Avatar]](/images/avatar/d8d855c465198499868fb2b566ebee8d.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2009 10:52:55
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
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/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2009 11:50:49
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2009 21:51:49
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2009 23:42:03
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
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/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/05/2009 07:46:59
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/05/2009 19:01:42
|
rodrigobranas
Smalltalk
Membro desde: 04/06/2004 10:06:33
Mensagens: 4
Offline
|
NullPointerException
|
SCJA, SCJP, SCJD (in progress), SCWCD and SCBCD |
|
|
 |
|
|