Qual é a saída do código abaixo ? Por que?

2 respostas
LecaDF
public class MyClass {
    public float x(float f, int i){
        System.out.println("1");
        return f * i;
    }
    public int x(int i , byte b){
        System.out.println("2");
        return i * b;
    }
    public double x(double d, float f){
        System.out.println("3");
        return d * f;
    }
    public int x(byte b, byte bb){
        System.out.println("4");
        return b * bb;
    }
 
    public static void main(String[] args){
        MyClass m = new MyClass();
        double  d = m.x(10,20);
        int     i = (int)(m.x(-1,-2));
        System.exit(0);
    }                
}

Alessandro

2 Respostas

maxguzenski

1
1

porque toda a literal é do tipo inteira
e todo o ponto flutuante é do tipo double.

L

A saida será :
1
1

Quando existe mais de um método possível para ser chamado, o método chamado será aquele mais ESPECÍFICO, ou seja , aquele que possuir o tamanho dos parâmetros maior ou igual do que o passado para funcão, mas o menor possível. Veja esse exemplo :

Teste (float a){System.out.println(1);}
Teste (Double a){System.out.println(2);}

Teste (10);

Observe que nesse caso , a saida sera " 1" , pois foi chamado o método mais espefíco !!

Criado 22 de janeiro de 2004
Ultima resposta 28 de jan. de 2004
Respostas 2
Participantes 3