Olha eu aki.
Galera to com uma dúvida meio boba,não estou entendendo a que o objeto está sendo referenciado. vejam só:
Vectors=newStack();
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.
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?
Vectord=newStack();d=newVector();
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:
Stackd=newStack();
Até…
L
luidhi
nbluis:
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?
Vectord=newStack();d=newVector();
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:
Stackd=newStack();
Até…
Isso é Polimorfismo. Agora vc pode contar para os amigos numa roda de chopp.
Bem vindo a orientação a objetos! :lol: :lol: :lol: :lol:
Em Tempo: Polimorfismo é uma prática de OO muito usada em Design Patterns, é bom reforçar a idéia.
[]'s
nbluis
Bem lembrado… a gente explica explica explica e não ensina o que importa…
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:
Alterar a declaração para: Stack d = new Stack();
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:
Vectors=newStack();Vectorv=newVector();Objecta=((Stack)s).pop();//Ok.Objectb=((Stack)v).pop();//Gera um ClassCastException
Opção com um if (muito comum em métodos)
publicObjectpopIfStack(Vectors){
if(sinstanceofStack)//TestamosseoVectorémesmoumStackreturn((Stack)s).pop(); //Somente se for fazemos o cast.returnnull;
}
sergiotaborda
ViniGodoy:
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.
diguix
Pow galera vlw… os fusíveis ja começaram a trabalhar rsrsr…
vou dar uma olhada melhor e estudar um pouco mais … !!
Abs’[]
L
luidhi
sergiotaborda:
ViniGodoy:
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 .
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. :oops:
danieldestro
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.