Fábio, Em Java, a especificação de literais numéricas precisaria conter um atributo que identificasse o seu tipo, principalmente em situações como essa, em que existem 2 métodos sobrecarregados com a mesma quantidade de parâmetros numéricos. Porém, para tornar a linguagem mais "maleável" e menos "rígida", digamos assim, não obrigaram a especificação do tipo da literal numérica toda vez que ela ocorra. Isso pode provocar erros excusos, como esse em que 2 métodos com a mesma assinatura são diferenciados pelo parâmetro numérico, que pode ser "int" ou "long", mas no momento da chamada, literais numéricas podem ser passadas sem qualquer especificador de tipo. Então, nesse caso, na chamada ao método getParam, da classe Overload, na linha 7, se você especificasse qual o tipo do literal numérico, o problema não ocorreria. Para especificar que o método que você quer chamar recebe um parâmetro do tipo long, basta chamar a função com o indicador de tipo, getParam(1L), onde o token "L" (ou "l") significa "long". Esse problema não ocorreu com a variável "i" no programa, porque variáveis já carregam o atributo de tipo, no momento em que são declaradas... Sempre que ocorrer isso, procure inserir sempre o especificador de tipo em literais.
[]'s Rosfran -----Original Message----- From: Fabio Pereira To: [EMAIL PROTECTED] Sent: 24/11/2002 11:29 Subject: [java-list] Sobrecarga e herança Pessoal, me ocorreu a seguinte questão (copiem o código para um editor para uma melhor visualização): /* Erro obtido: Overload.java:7: reference to getParam is ambiguous, both method getParam(int) in Base and method getParam(long) in Sub match sub.getParam(i); //Deverá chamar getParam de Base Se comento a linha 7, funciona !! Alguem sabe porque para a sobrecarga do método getParam é ambiguo e para getParam1 não é ?? */ public class Overload{ public static void main(String[] args){ int i=10; long l = 10L; Sub sub = new Sub(); sub.getParam(i); //Deverá chamar getParam de Base sub.getParam(l); //Deverá chamar getParam de Sub sub.getParam1(i); //Deverá chamar getParam1 de Sub sub.getParam1(l); //Deverá chamar getParam1 de Base } } class Base{ public void getParam(int i){ System.out.println("getParam da classe Base (parametros: int)"); } public void getParam1(long l){ System.out.println("getParam1 da classe Sub (parametros: long)"); } } class Sub extends Base{ public void getParam(long l){ System.out.println("getParam da classe Sub (parametros: long)"); } public void getParam1(int i){ System.out.println("getParam1 da classe Base (parametros: int)"); } } agradeço antecipadamente, Fabio Pereira _________________________________________________________________ MSN Hotmail, o maior webmail do Brasil. http://www.hotmail.com ------------------------------ 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] -------------------------------------------------------------------------