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

Responder a