En dos días tengo un examen en Java, y no puedo encontrar la respuesta a esta pregunta:Sobrecarga de Java: Número, Número; int, Doble
class ClassA {
public String foo(Integer x , int y) {
return "Integer, int";
}
public String foo(int x, Double y) {
return "int, Double";
}
public String foo(Number x, Number y) {
return "Number, Number";
}
public String foo(Object x, Object y) {
return "Object, Object";
}
public static void main(String... args) {
ClassA a = new ClassA();
System.out.print(a.foo(5, 1.2f) + " ");
System.out.println(a.foo(null, null));
}
}
¿Cuál es la salida?
La respuesta es:
Number, Number Number, Number
sé que Java siempre elige el método más específico, es por eso que se a.foo(null,null);
envoke el Método Number,Number
y no el método Object,Object
. ¿Pero por qué a.foo(5,1.2f);
también envían el método Number,Number
y no el método int,Double
?
Pero una cosa más que podría ser útil: Si quito el f
después 1.2
, por lo que la llamada es: a.foo(5,1.2);
me sale un error de compilación, que no se puede elegir entre el Método Number,Number
y int,Double
.. .
sería de gran ayuda, si ustedes pudieran explicar que a mí :)
http://stackoverflow.com/a/9362386/368544 (esto explica null, null). Float case es trivial. – mschonaker