Duvida sobre ambiguidade de metodoas....a JVM chama qual?

Olá, estou começando a estudar para certificação

quando temos métodos ambiguos, quando complila e quando não compila?

se tenho um metodo sobrecarregado byte, double, long qual metodo a JVM irá chamar se na lista de parametros do metodo eu passar um int.

veja o exemplo


package testkillerludionei;

class CalculadoraAmbigua {

public int soma(byte b1, byte b2){

  System.out.println("soma de byte");

 return b1 + b2;

}

public long soma (long lg1, long lg2){

    System.out.println("soma de long");

 return lg1 + lg2;

}
public double soma(double db1, double db2){

   System.out.println("soma de double");

   return db1 + db2;

}

}

class TesteCalculadora{

public static void main(String args[]){

    CalculadoraAmbigua calc = new CalculadoraAmbigua();

    calc.soma(24, 25);      //aqui ele chama o metodo (long, long) não deveria se (byte, byte) ???

}

}

Não, pois constantes inteiras são do tipo int. Apesar do valor caber em um byte elas não são convertidas.

Boa tarde,

Quando você executa o código calc.soma(24, 25); você está passando dois inteiros como parametro, nós sabemos que os inteiros são maiores que os bytes então o método que tem dois bytes na assinatura nunca será chamado, o método a ser executado será um método com parametros de entrada que consigam “receber” inteiros, nesse caso o primeiro método seria o que recebe longs e em seguida seria o que recebe doubles.

Espero ter ajudado.

Flws

perfeito, agora eu posso prosseguir meus estudos que vão longee…kkkkkkkkk

obrigado.