Bom, Concordo que as duas chamadas vão chamar o mesmo método. Logo porque não chamar o método pela subclasse direto né? Eu enxergo no mínimo duas utilizações interessante para isso. Imagine que você crie uma super classe "Sup" e 20 subclasses "Sub1", "Sub2" ... "Sub20". A classe Sup tem um método save() que todas as subclasses sobreescrevem, que é responsável pela persistência do objeto. Agora suponha que você, durante o processamento de um programa crie uma instância de cada uma das subclasses, e ao final do processamento precisa chamar o método save de todo mundo. Vai te dar um pouquinho de trabalho chamar o save de cada um deles. Ao invés disso, você poderia estar criando um array de objetos Sup, como Sup AAA []. Dentro de cada linha do array, você colocaria uma referência a cada um dos objetos de subclasse, e ao final do processamento, poderia chamar um for e a cada linha do for, vc chama o metodo save da super classe, algo como: for(int i = 0 ; i < AAA.lenght; i++){ AAA[i].save(); } Como o método save chamado seria indiretamente o da subclasse, você teria o processamento exatamente com esperado, sem precisar chamar o método save para cada um dos tipos de subclasse existente, economizando escrita. Não sei se você não perde muito em processamento em função do for, porém com certeza você economiza código, podendo inclusive dessa forma automatizar alguns processos, pensando assim de forma abstrata. Um outro exemplo é que você poderia utilizar o conceito de factory dessa maneira também. Imagine que você tem uma classe que trata Funcionalidades de um sistema. Assim, você cria uma super classe Funcionalidade, que possui alguns métodos padrão e a cada nova funcionalidade, você cria uma classe que extende a super classe Funcionalidade. Assim, você poderia ter uma classe tratadora das funcionalidades que trata uma funcionalidade genérica, e sempre que adicionar uma nova funcionalidade, basta criar uma nova classe que extende a classe Funcionalidade e registra-la em um arquivo de configurações, por exemplo. A classe tratadora sempre trabalha com os metodos de superclasse, de forma que você não precisa nunca mais mexer nela, aumentando bastante a reutilização dos seus componentes bem como escalabilidade.
ETA []s Lincoln Masao Muraoka Junior Analista Programador ASTI Tecnologia - Unidade de Soluções Tel.: 55 11 3031-0069 r. 232 [EMAIL PROTECTED] www.astitecnologia.com.br ----- Original Message ----- From: "everson" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, January 24, 2003 2:15 PM Subject: [java-list] polimorfismo ..? olá lista. To lendo o Java como Programar - Deitel, cap 9, pág 409 à 414. Arquivo Test.java (413). A dúvida é: pq que ao invés de fazer: 1) Employee ref; // superclass reference Boss b = new Boss( "John", "Smith", 800.00 ); ref = b; output += ref.toString() + " earned $" + .... (como está no livro) não fez direto : 2) output += b.toString() + " earned $" + .... (minha dúvida) Já q no 1) vai ser chamado o metodo toString da classe Boss, como no 2) ... Existe alguma diferença entre um e outro ??? ------------------------------ 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] ------------------------------------------------------------------------- ------------------------------ 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] -------------------------------------------------------------------------