| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 12:21:11
|
javaAurelio
Java Ninja
![[Avatar]](/images/avatar/af50a8df9bf6c87ef204851a6a1d1918.jpg)
Membro desde: 11/09/2006 11:36:53
Mensagens: 273
Offline
|
Olha que legal Entao eu posso subir e descer na hierarquia ? Assim nao funciona Trebble t2 = new Trebble(); Base b2 = (Base) t2; Central c2 = (Central) b2; c2.name(); Oque nao OO explica isso ?
This message was edited 1 time. Last update was at 26/03/2009 12:25:30
|
SCJP 1.4 e SCWCD 1.5 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 12:48:45
|
davidtiagoconceicao
Virtual Machine Man
![[Avatar]](/images/avatar/32fb0afb79c483a66f39391a80354f8c.png)
Membro desde: 17/10/2008 07:28:29
Mensagens: 567
Localização: Blumenau - SC
Offline
|
Não sei se compreendi bem a sua dúvida, mas vamos lá.
Tente aplicar o teste o é um... (is a...).
Aplicando ao seu exemplo:
Trebble é um Trebble, portanto a atribuição é válida.
Treble não é um Base, portanto a conversão é inválida, embora Base seja um Trebble.
Base não é um Central, portanto a conversão também é inválida.
|
Bacharel em Ciência da Computação/FURB
SCJP 6
Android Developer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 13:05:06
|
javaAurelio
Java Ninja
![[Avatar]](/images/avatar/af50a8df9bf6c87ef204851a6a1d1918.jpg)
Membro desde: 11/09/2006 11:36:53
Mensagens: 273
Offline
|
E porque assim funciona ?
-> Trebble nao é um Base, Base é um Trebble
Por que nao da erro de Cast ?
|
SCJP 1.4 e SCWCD 1.5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 13:19:53
|
davidtiagoconceicao
Virtual Machine Man
![[Avatar]](/images/avatar/32fb0afb79c483a66f39391a80354f8c.png)
Membro desde: 17/10/2008 07:28:29
Mensagens: 567
Localização: Blumenau - SC
Offline
|
javaAurelio wrote:E porque assim funciona ?
-> Trebble nao é um Base, Base é um Trebble
Por que nao da erro de Cast ?
Funciona por que Central é um Base.
O cast vai tentar converter a referência para o objeto instanciado, que no caso é do tipo Central, para uma referência do tipo Base. No caso, o objeto instanciado é do tipo Central, como Central extende Base, Central é um Base, e a conversão ocorre normalmente.
This message was edited 1 time. Last update was at 26/03/2009 13:20:55
|
Bacharel em Ciência da Computação/FURB
SCJP 6
Android Developer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 14:05:38
|
taaqui
JavaEvangelist
![[Avatar]](/images/avatar/13b96a16c5db9bc9de8f05b6f74a5d96.jpg)
Membro desde: 05/02/2008 12:25:07
Mensagens: 300
Localização: Rio de Janeiro
Offline
|
Me corrijam se estiver errado, esse assunto esta meio vago ainda na minha mente.
This message was edited 1 time. Last update was at 26/03/2009 14:05:55
|
SCJP-SCWCD-SCBCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 14:24:35
|
davidtiagoconceicao
Virtual Machine Man
![[Avatar]](/images/avatar/32fb0afb79c483a66f39391a80354f8c.png)
Membro desde: 17/10/2008 07:28:29
Mensagens: 567
Localização: Blumenau - SC
Offline
|
taaqui wrote:
Me corrijam se estiver errado, esse assunto esta meio vago ainda na minha mente.
Acho que é isso mesmo cara, exceto este comentário: "// vai contra a OO mais ta blz. ".
Não consegui identificar problema quanto a OO nesta linha.
Quando se tratar de conversões (casts), preste atenção sempre ao tipo declarado e ao tipo efetivamente instanciado. A conversão irá sempre atuar sobre o tipo instanciado.
|
Bacharel em Ciência da Computação/FURB
SCJP 6
Android Developer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 17:13:44
|
douglas_vidotto
JavaTeenager
![[Avatar]](/images/avatar/2b37aae16df6fc89dd503c3b2dfbf165.png)
Membro desde: 12/08/2008 15:43:18
Mensagens: 195
Offline
|
E aí javaaurelio blz?? Eu testei o seu código aqui e não deu erro de compilação não. Onde apareceu o erro?? Para mim o seu cast está correto. As classes estão na mesma árvore de herança, e como você esta passando uma referência de uma superclasse para uma subclasse, o cast é obrigatório e deveria funcionar acho eu.
This message was edited 1 time. Last update was at 26/03/2009 17:14:29
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 17:15:41
|
douglas_vidotto
JavaTeenager
![[Avatar]](/images/avatar/2b37aae16df6fc89dd503c3b2dfbf165.png)
Membro desde: 12/08/2008 15:43:18
Mensagens: 195
Offline
|
Ah, o código que eu testei foi aquele que voce disse que tava dando errado. Aqui deu certo...
This message was edited 1 time. Last update was at 26/03/2009 17:18:18
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 19:35:01
|
javaAurelio
Java Ninja
![[Avatar]](/images/avatar/af50a8df9bf6c87ef204851a6a1d1918.jpg)
Membro desde: 11/09/2006 11:36:53
Mensagens: 273
Offline
|
douglas_vidotto wrote:Ah, o código que eu testei foi aquele que voce disse que tava dando errado. Aqui deu certo...
Assim da erro. Em Base b = (Base) t;
|
SCJP 1.4 e SCWCD 1.5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/03/2009 19:44:11
|
peczenyj
Moderador
![[Avatar]](/images/avatar/299dc35e747eb77177d9cea10a802da2.jpg)
Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline
|
ok, se vc estiver trabalhando com isto:
Trebble t = new Trebble();
Base b = (Base) t;
Vc não vai conseguir fazer este cast pois t NÃO É um objeto da classe Base, logo o cast é impossivel.
Base É UM Trebble, mas o contrario não é, necessariamente, verdade.
Imagine este exemplo
class Homem extends Animal{}
Animal cachorrofofo = new Animal();
Homem fulano = (Homem) cachorrofofo;
Não faz sentido, certo? Um homem pode passar por Animal pois ele é uma especialização, mas o contrario não é possivel.
Agora isso é.
Trebble t = new Base();
Base b = (Base) t;
Percebe a diferença?
|
http://pacman.blog.br
'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.' |
|
|
 |
|
|