2015-09-25 2 views
0

Может кто-нибудь объяснить мне, почему, если в перспективе этот кодJava передать «нуль» для перегруженных методов

public class MainClass{ 

    public void method(Object obj){ 
     System.out.println("+++++++++obj"); 
    } 

    public void method(A a){ 
     System.out.println("**********a"); 
    } 

    public static void main(String[] args){ 
     new MainClass().method(null); 
    } 
} 

Я получаю этот результат:

**********a 

Как может нулевой ссылка разрешить в ссылку на объект «A»?

+4

'null' может быть решен ни к чему, и, таким образом, будет использоваться наиболее конкретный метод. Добавьте метод с типом параметра 'B', и компилятор должен жаловаться на неоднозначные параметры. – Thomas

+0

Это не переопределение, это перегрузка - и это не кажется * ужасно * неясным для меня. Вы ожидали бы, что 'A a = null;' не скомпилировать? –

ответ

6

Наиболее специфический метод выбирается при запуске. A более специфичен, чем Object и

A a = null; 

является действительным.

Следовательно, когда вы проходите null, его выбор (A a).

Вот Language specification

Смежные вопросы