| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 08:41:35
|
diguix
JavaChild
![[Avatar]](/images/avatar/16ad66b2d7d7eda19f34e2f6197e2236.jpg)
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! |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 08:49:46
|
nbluis
GUJ Master
![[Avatar]](/images/avatar/f0682320ccbbb1f1fb1e795de5e5639a.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 09:14:10
|
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... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 09:16:08
|
nbluis
GUJ Master
![[Avatar]](/images/avatar/f0682320ccbbb1f1fb1e795de5e5639a.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 09:19:31
|
Mantu
GUJ Ranger
![[Avatar]](/images/avatar/35285aa740b37f0b1933da97bf4ca4b9.jpg)
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.
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 09:27:13
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 09:41:40
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 09:48:44
|
diguix
JavaChild
![[Avatar]](/images/avatar/16ad66b2d7d7eda19f34e2f6197e2236.jpg)
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 10:04:13
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 12:37:57
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/02/2007 13:07:44
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
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 |
|
|
 |
|
|