Recentemente surgiu uma duvida sobre SobreCarga/Overloading.
Analisamos o código a seguir
/*Exemplo em código
Podemos citar como exemplo uma função f aplicada aos parâmetros reais a e b, onde, dependendo dos tipos dos parâmetros, podemos ter a execução da primeira ou da segunda função, caracterizando o polimorfismo ad-hoc de overloading.*/
public class Aritmetica{
public static int f (int x, int y) {
return x+y;
}
public static double f (double x, double y) {
return x*x + y*y;
}
}
class Testa{
public static void main(String[] args){
double a=1.2;
double b=3.5;
System.out.println(Aritmetica.f(a,b));
// Resulta 13.9 que é igual a
// 1.2 * 1.2 + 3.5 * 3.5
}
}
//Fonte http://pt.wikipedia.org/wiki/Java_%28linguagem_de_programa%C3%A7%C3%A3o%29
Então teremos usado a função número dois ou a função no caso de minhas variaveis ser double, correto?
public static double f (double x, double y) {
return x*x + y*y;
}
Na verdade o que acontecerá ser minha variavel for um float por exemplo?
Não cheguei a fazer o teste na prática por que minha duvida é a seguinte como a JVM trata a informação para retornar a função correta, isso identificando a função de sobrecarga correta.
É essa a idéia do valueOf da String.
Você simplesmente passa um objeto, int, double e ela faz a conversão para você. A JVM se encarrega desse trabalho.
É essa a idéia do valueOf da String.
Você simplesmente passa um objeto, int, double e ela faz a conversão para você. A JVM se encarrega desse trabalho.
[/quote]
Disse, a JVM irá fazer a conversão correto.
Mais minha duvida é a seguinte a máquina virtual interpreta essa situação como?
Em qual situação posso utilizar essa sobrecarga de metodos?
Por exemplo poderia criar 2 metodos para melhor leitura e facilidade na escolha dos programadores seguintes.
Aritmetica.double(double x, double y)
Atimetica.int(int x, int y)
O quando você deve utilizar sobrecarga é decisão exlusiva do programador.
Vai da sua interpretação se um método precisa sofrer sobrecarga ou não.
Eu usei sobrecarga para transformação de um arquivo XML para um Document, por exemplo.
O método aceitava como entrada: byte[], InputStream, File (não me recordo se haviam outros).
Dessa forma, eu não obrigava que quem quisesse utilizar o método sempre usasse byte[], por exemplo.
A soma pode ser uma forma de se fazer isso, algo como:
public double soma(double x, double y);
public double soma(String x, String y);