Considerando dois métodos com o mesmo nome e tipo de retorno, apenas a mudança na ordem dos argumentos já configura sobrecarga?
Exemplo:
void teste(String a, int b);
void teste(int b, String a);
Obrigado
Considerando dois métodos com o mesmo nome e tipo de retorno, apenas a mudança na ordem dos argumentos já configura sobrecarga?
Exemplo:
void teste(String a, int b);
void teste(int b, String a);
Obrigado
Sim, pois:
Os métodos sobrecarregados DEVEM alterar a lista de argumentos;
Os métodos sobrecarregados PODEM alterar o tipo de retorno;
Os métodos sobrecarregados PODEM alterar o modificador de acesso;
Os métodos sobrecarregados PODEM declarar exceções verificadas ou mais abrangentes;
Um método pode ser sobrecarregado na mesma classe ou em uma subclasse;
Fonte: http://marcosvidolin.wordpress.com/2010/03/09/regras-para-a-sobrescresita-e-sobrecarga-de-
Sim.
A sobrecarga é exatamente isso. Ter métodos com o mesmo nome mas com parâmetros diferentes, e a ordem já é uma mudança.
Vi diversas caracterizações como estas que vocês citaram, mas nenhuma delas
fala explicitamente sobre a ordem dos argumentos.
Mais uma vez Valeu.
[quote=wsch]Vi diversas caracterizações como estas que vocês citaram, mas nenhuma delas
fala explicitamente sobre a ordem dos argumentos.
Mais uma vez Valeu.[/quote]
Os métodos sobrecarregados DEVEM alterar a lista de argumentos;
Isso não ta explicito ?
É exatamente o que vc tá fazendo no seu exemplo:
void teste(String a, int b);
void teste(int b, String a);
Ou seja, o código citado acima é uma sobrecarga válida.
A alteração na ordem dos argumentos, se eles tiverem tipos diferentes, é uma sobrecarga.
Se apenas os nomes forem alterados, não é uma sobrecarga.
Por exemplo,
int x (int y, int z)
e
int x (int z, int y)
não é uma sobrecarga (você só renomeou os parâmetros mas não mudou os tipos). Entretanto, tome cuidado com esse tipo de coisas, porque o Java não irá “desembaralhar” os parâmetros para você.
Uma forma de você entender por que as coisas são assim é pensar como é que o Java faz para chamar um método.
Ao chamar um método, o código que chama o método empilha os parâmetros em uma determinada ordem, para que o método os desempilhe nessa mesma ordem.
Quando se empilham os parâmetros, não se passa o nome dos parâmetros, mas é necessário especificar o tipo de cada um para que o código seja adequado para o empilhamento dos parâmetros. O método que foi chamado, por sua vez, desempilha os parâmetros adequadamente, na ordem em que foram declarados.
Em linguagens onde você pode embaralhar e omitir alguns parâmetros, desde que você especifique os tipos adequados, o compilador se vira para desembaralhar os parâmetros e passar valores padrões para indicar que você omitiu um determinado parâmetro. Uma linguagem dessas é o PL/SQL (Oracle).
[quote=wellington.nogueira]Importante lembrar que, apesar de estar escrito ali em cima que:
Isso não quer dizer que dois ou mais métodos com mesmo nome e parâmetros mas retornos diferentes sejam sobrecarga:
//Não são sobrecargas válidas
public void meuMetodo() {}
public String meuMetodo() {return "teste";}
//São sobrecargas válidas
public void meuMetodo(int i) {}
public String meuMetodo(String dado) {return dado + "teste";}
A sobrecarga NÃO verifica o tipo de retorno.
[/quote]
Mesmo por que, se você tentar compilar um código com os métodos que usou como exemplo, o compilador irá acusar erro na sintaxe, pois o mesmo nome e argumentos são utilizados para mais de um método.
Importante lembrar que, apesar de estar escrito ali em cima que:
Isso não quer dizer que dois ou mais métodos com mesmo nome e parâmetros mas retornos diferentes sejam sobrecarga:
//Não são sobrecargas válidas
public void meuMetodo() {}
public String meuMetodo() {return "teste";}
//São sobrecargas válidas
public void meuMetodo(int i) {}
public String meuMetodo(String dado) {return dado + "teste";}
A sobrecarga NÃO verifica o tipo de retorno.