【发布时间】:2012-06-15 15:18:58
【问题描述】:
这两天我有一个Java考试,我想不出这个问题的答案:
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);会调用Number,Number方法而不是Object,Object方法。
但是为什么a.foo(5,1.2f); 也调用Number,Number 方法而不是int,Double 方法呢??
但还有一件事可能会有所帮助:
如果我在1.2 之后删除f,那么调用是:
a.foo(5,1.2);
我收到一个编译器错误,它无法在 Number,Number 和 int,Double 方法之间进行选择...
如果你们能向我解释一下,那将非常有帮助:)
【问题讨论】:
-
stackoverflow.com/a/9362386/368544(这解释了 null,null)。浮动案例是微不足道的。
标签: java overloading