Confusão com objeto  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
diguix
JavaChild
[Avatar]

Membro desde: 27/08/2006 19:53:29
Mensagens: 142
Localização: RJ/Rio de Janeiro
Offline

Olha eu aki.
Galera to com uma dúvida meio boba,não estou entendendo a que o objeto está sendo referenciado. vejam só:


quando uso : System.out.print(s.getClass().getName());
a jvm me diz que esse é inicializado pela classe Stack, mas quando chamo o
método pop(), da classe Stack ele me diz que não encontrou em Vector.


Alguem pode me dar uma luz em relação a isso??

Abs'[]


O conhecimento está a onde nós olhamos com vontade de aprender!
[Email]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Claro, voce esta instanciando um objeto Vector e apontando para um Stack.
Ao obter a referencia ele é um stack.
mas o teu Vector não tem o metodo pop, por isso não pode chamalo.

exemplo.
o que aconteceria se eu fizesse isto?


Lógicamente ele não é mais um stack, como posso chamar o método pop?

ou seja para poder invocar o método pop só se ele for um objeto stack na instancia ou filho dela.
Assim:


Até....

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
luidhi
Virtual Machine Man

Membro desde: 14/09/2006 10:58:22
Mensagens: 604
Offline

nbluis wrote:Claro, voce esta instanciando um objeto Vector e apontando para um Stack.
Ao obter a referencia ele é um stack.
mas o teu Vector não tem o metodo pop, por isso não pode chamalo.

exemplo.
o que aconteceria se eu fizesse isto?


Lógicamente ele não é mais um stack, como posso chamar o método pop?

ou seja para poder invocar o método pop só se ele for um objeto stack na instancia ou filho dela.
Assim:


Até....

Isso é Polimorfismo. Agora vc pode contar para os amigos numa roda de chopp.
Bem vindo a orientação a objetos!
Em Tempo: Polimorfismo é uma prática de OO muito usada em Design Patterns, é bom reforçar a idéia.
[]'s

Nada não...
[MSN] [ICQ]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Bem lembrado... a gente explica explica explica e não ensina o que importa.....

Valeu....

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
Mantu
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline

diguix, vale a pena você dar uma lida nesse material aqui:
http://www.javaranch.com/campfire/StoryCups.jsp
Além de didático, é bem divertido.

[]'s
Mantu

"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.

[Email] [MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

O princípio é o seguinte, todo Stack é um Vector, mas nem todo Vector é um Stack. Isso porque Vector é uma superclasse de Stack. Quando você faz:

Vector d = new Stack();

Você está dizendo ao java, o Vector "d" é aquele Stack ali. O java entende isso, mas continua encarando o Stack como um Vector.

O método pop vai ficar "escondido", afinal, vocë disse para o java que para você só interessa as propriedades de Vector dele.

Você tem duas alternativas:

1. Alterar a declaração para: Stack d = new Stack();
2. Fazer um cast, indicando ao Java que você sabe que o Vector em questão é um Stack (isso nem sempre pode ser verdade). Se isso não for verdade, você rebecerá um ClassCastException. Você também pode se prevenir tetando o tipo da classe com um if. Exemplos:



Opção com um if (muito comum em métodos)

[WWW]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

ViniGodoy wrote:O princípio é o seguinte, todo Vector é um Stack, mas nem todo Stack é um Vector. Isso porque Vector é uma superclasse de Stack.


Não será que é ao contrário? Veja bem, se Stack herda de Vector , Todos os Stack são tb Vector. Mas nenhum outro Vector é Stack excepto o poprio Stack.

Se todo o Vector fosse Stack, como vc afirma então se: ClassX extends Vector , ClassX é um Vector e pelo que vc disse ClassX seria um Stack. Isso é falso. ClassX não tem o método pop(), por exemplo.

[WWW]
diguix
JavaChild
[Avatar]

Membro desde: 27/08/2006 19:53:29
Mensagens: 142
Localização: RJ/Rio de Janeiro
Offline

Pow galera vlw... os fusíveis ja começaram a trabalhar rsrsr...
vou dar uma olhada melhor e estudar um pouco mais ... !!

Abs'[]

O conhecimento está a onde nós olhamos com vontade de aprender!
[Email]
luidhi
Virtual Machine Man

Membro desde: 14/09/2006 10:58:22
Mensagens: 604
Offline

sergiotaborda wrote:
ViniGodoy wrote:O princípio é o seguinte, todo Vector é um Stack, mas nem todo Stack é um Vector. Isso porque Vector é uma superclasse de Stack.


Não será que é ao contrário? Veja bem, se Stack herda de Vector , Todos os Stack são tb Vector. Mas nenhum outro Vector é Stack excepto o poprio Stack.

Se todo o Vector fosse Stack, como vc afirma então se: ClassX extends Vector , ClassX é um Vector e pelo que vc disse ClassX seria um Stack. Isso é falso. ClassX não tem o método pop(), por exemplo.


Sim, seu conceito está certo. É isso mesmo, não prestei atenção .

Se ClasseX extends Vector e
Stack extend Vector

Você pode:
Vector classeX = new ClasseX();
Vector stack = new Stack();
Se você fizer:
classeX = stack;
classeX vira referência de Stack então
Stack classeY = (Stack)classeX;
Se fizer isso vai dar erro:
ClasseX classeZ = (ClasseX)classeX; // erro de cast.
Compreenda variáveis como referência ao endereço de memória do objeto, fica mais fácil entender...
[]'s
[MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

sergiotaborda wrote:
ViniGodoy wrote:O princípio é o seguinte, todo Vector é um Stack, mas nem todo Stack é um Vector. Isso porque Vector é uma superclasse de Stack.


Não será que é ao contrário? Veja bem, se Stack herda de Vector , Todos os Stack são tb Vector. Mas nenhum outro Vector é Stack excepto o poprio Stack.

Se todo o Vector fosse Stack, como vc afirma então se: ClassX extends Vector , ClassX é um Vector e pelo que vc disse ClassX seria um Stack. Isso é falso. ClassX não tem o método pop(), por exemplo.


Ops, era ao contrário mesmo, foi um acidente, desculpem. Já tá corrigido no post original.
[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

nbluis wrote:Claro, voce esta instanciando um objeto Vector e apontando para um Stack.


Na verdade está instanciando um Stack e referenciando numa variável do tipo Vector. Então você só pode usar os métodos definidos na classe Vector ou superclasses.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team