过两天我在Java中的考试,我不能回答弄清楚这个问题:Java重载:Number,Number; INT,双
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));
}
}
什么是输出?
的答案是:
Number, Number Number, Number
我知道的Java总是选择最指定的方法,这就是为什么a.foo(null,null);
将envoke的Number,Number
方法,而不是Object,Object
方法。 但为什么a.foo(5,1.2f);
也启用Number,Number
方法而不是int,Double
方法?
但有可能会有所帮助件事: 如果我删除f
后1.2
,使呼叫: a.foo(5,1.2);
我得到一个编译错误,它不能Number,Number
和int,Double
方法之间选择.. 。
将是非常有益的,如果你们能解释我:)
http://stackoverflow.com/a/9362386/368544(这也解释了NULL,NULL)。浮动情况是微不足道的。 – mschonaker