In due giorni ho un esame in Java, e io non riesco a capire la risposta a questa domanda:Sovraccarico di Java: numero, numero; int, double
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));
}
}
Qual è l'uscita?
La risposta è:
Number, Number Number, Number
So che Java sceglie sempre il metodo più indicato, è per questo che sarà a.foo(null,null);
envoke il Number,Number
metodo e non il metodo Object,Object
. Ma perché a.foo(5,1.2f);
invoca anche il metodo Number,Number
e non il metodo int,Double
??
Ma una cosa che potrebbe essere utile: se mi tolgo la f
dopo 1.2
, in modo che la chiamata è: a.foo(5,1.2);
ottengo un errore del compilatore, che non può scegliere tra il metodo Number,Number
e int,Double
.. .
sarebbe veramente utile, se voi ragazzi potrebbe spiegare che a me :)
http://stackoverflow.com/a/9362386/368544 (questo spiega null, null). La cassa galleggiante è banale. – mschonaker