Olá, Sou um integrante da dicas-list a tempos e não pude deixar de prestar atenção na dica enviada pelo sr. Walter Augusto Werner. O problema das classes dele não é o java e sim a maneira que ele implementou o exemplo. ---------------------------------------------------- erro no exemplo 1.
Object o = new Integer(1); B b = new B(); b.x(o); Quando a gente "constroi" uma classe pai com um construtor de uma de suas subclasses, o pai ainda continua sendo da classe pai, apenas os métodos que ambos tem em comum, e foram sobre escritos, eh que muda. Portanto o "Object o" ainda é um Object apesar de ser inicializado com o construtor da classe Integer. Para que esse metodo fique do jeito que se espera, basta fazer um cast. ex.: b.x((Integer)o); ----------------------------------------------------------- erro no exemplo 2 Integer i = new Integer(1); A a = new B(); a.x(i); Esse erro é muito parecido com o primeiro, pois no momento em que ele inicializa a variavel 'a' da Classe "A" com o construtor da classe "B", apenas os métodos em comum são alterados, e como a classe "A" não tem o método "x(Integer i)" ele sempre executa o metodo "x(Object o)". Segue o exemplo de como deveria ser a implementação da classe "B" para que o resultado esperado pelo nosso amigo aconteça. ex.: public class B extends A { public void x(Integer i) { System.out.println("Metodo Filho e é um Integer"); } public void x(Object o) { if (o instanceof Integer) { this.metodo((Integer)o); } else { super.metodo(o); } } } Mas se você prestar a atenção com a correção do segundo exemplo, o primeiro tb será corrigido. []'s Marcus Vinicius Lewis Martins RIO GRANDE ENERGIA S/A - Telemática mailto:[EMAIL PROTECTED] mailto:[EMAIL PROTECTED] -------------------------------------------------------------- TRACE SISTEMAS LTDA http://www.tracesistemas.com.br --------------------------------------------------------------