Alguem sabe explicar ?  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
javaAurelio
Java Ninja
[Avatar]

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
[Yahoo!]
davidtiagoconceicao
Virtual Machine Man
[Avatar]

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
javaAurelio
Java Ninja
[Avatar]

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
[Yahoo!]
davidtiagoconceicao
Virtual Machine Man
[Avatar]

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
taaqui
JavaEvangelist
[Avatar]

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
[Email]
davidtiagoconceicao
Virtual Machine Man
[Avatar]

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
douglas_vidotto
JavaTeenager
[Avatar]

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

douglas_vidotto
JavaTeenager
[Avatar]

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

javaAurelio
Java Ninja
[Avatar]

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
[Yahoo!]
peczenyj
Moderador
[Avatar]

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.'
[WWW]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team