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