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