2014-12-10 4 views
0

У меня есть фиктивная программа Java дал ценам ниже выполнение последовательности статических методов в Java

public class DummyTest { 
    public static void main(String[] args) { 
     hungry(null); 
    } 

    public static void hungry(Object o){ 
     System.out.println("object"); 
    } 

    public static void hungry(String s){ 
     System.out.println("string"); 
    } 
} 

эта программа возвращает отпечатки string. пожалуйста, скажите мне, почему он печатает string, а не object.

+2

Это не имеет никакого отношения к 'static', тот же принцип применяется к любому методу. –

ответ

5

Вот как работает перегрузка метода. Когда параметр одного кандидата более специфичен, чем параметр другого (поскольку String более конкретный, чем Object), выбирается метод с более конкретным параметром.

Обратите внимание, что при добавлении 3-го hungry метода с параметром ссылочного типа, не связанного с String (например Integer), код не пройдет компиляцию, так как компилятор не будет иметь предпочтения между hungry(String) и hungry(Integer).

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