Перегрузка Java: число, число ; int,Double

Через два дня у меня экзамен по 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,DoubleMethod...

Было бы очень полезно, если бы вы, ребята, могли объяснить это мне :)

13
задан user1459010 15 June 2012 в 15:18
поделиться