Через два дня у меня есть экзамен в 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...
Было бы очень полезно, если бы вы, ребята, могли мне это объяснить:)