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