Через два дня у меня экзамен по 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
, а не ] Объект,Объект
Метод.
Но почему a.foo(5,1.2f);
также вызывает метод Number,Number
, а не метод int,Double
??
Но еще одна вещь, которая может быть полезна:
Если я удалю f
после 1.2
, чтобы вызов был:
a.foo(5,1.2);
Я получаю сообщение об ошибке компилятора, что он не может выбрать между Number,Number
и int,Double
Method...
Было бы очень полезно, если бы вы, ребята, могли объяснить это мне :)