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] 
-------------------------------------------------------------------------

Responder a