Caro Andre, o que estah acontecendo no caso citado eh a nossa velha conhecida "checagem de tipo em tempo de compilacao" para a provavel checagem do comportamento do objeto em questao. Ao se falar em Polimorfismo logo lembramos de "Ligacao tardia" e sendo assim devemos distinguir duas coisas diferentes: Tipo em tempo de Compilacao e Tipo em tempo de Execucao. Relembrando essa definicoes, podemos chegar a uma das maneiras de se evitar o que aconteceu atraves de um cast para o tipo de subclasse de poligno adequada a cada chamada, e o famigerado uso do operador instanceOf. Ou seja, o seu metodo mostra() poderia ficar assim:
public void mostra(Poligono p){ if (p instanceOf Retangulo){ System.out.println(((Retangulo)p).getPreco()); }else if (p instanceOf Circulo){ System.out.println(((Circulo)p).getPreco()); ...... //Aqui tratariamos o caso de p ser realmente da classe Poligono se eh que ela pode ser instanciada, jah que o normal seria ter feito-a abstrata. else { System.out.println("Como o argumento p eh um Poligono(SuperClasse) ele nao tem o comportamento do getPreco() definido..."); } ----- Original Message ----- From: "André Barbosa" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, January 30, 2002 6:11 PM Subject: [java-list] Dúvida > Dúvida básica de iniciante: > > Fazendo um teste de polimorfismo, montei uma estrutura assim: > > Classes: > > poligono > / \ > retangulo circulo > | > quadrado > > > Retangulo e circulo extendem de poligono, e quadrado extende de retangulo. Pois bem. > > Todas as classes implementem um método getValor, que retorna um valor (constante) double do objeto. E as classes retangulo, circulo e quadrado implementam um método getPreco, que retorna um preco (constante) double objeto. > > Suponhamos que eu queira criar um array de referência para vários poligonos, eu crio um array do tipo poligono > > poligono[] p = new poligono[3]; > > Depois de criar cada objeto em seu indice no array, eu quero listar o valor deles. Normal, na classe que eu criei o array, crio um método "Mostra", por exemplo, que recebe um poligono > > public void mostra(poligono p) { > System.out.println(p.getValor()); > } > > Porém, se eu utilizo o mesmo método para exibir o Preco... > > public void mostra(poligono p) { > System.out.println(p.getPreco()); > } > > Me dá um erro de compilação, pq ele diz que getPreco() é um carinha desconhecido da classe poligono. > > A pergunta é a seguinte: eu sou obrigado a implementar getPreco() em poligono, para o polimorfismo funcionar???? > > []´s > > André > > > ------------------------------ LISTA SOUJAVA ---------------------------- > http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP > dúvidas mais comuns: http://www.soujava.org.br/faq.htm > regras da lista: http://www.soujava.org.br/regras.htm > para sair da lista: envie email para [EMAIL PROTECTED] > ------------------------------------------------------------------------- > ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------