Преобразование типов и перегрузка методов - PullRequest
5 голосов
/ 04 февраля 2012

Это пример кода:

public class OverloadingExample {
public void display(Object obj){
    System.out.println("Inside object");
}

public void display(Double doub){
    System.out.println("Inside double");
}

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

Выход:

Внутри двойной

Может кто-нибудь объяснить, почему перегруженный метод с параметром Double вызывается вместо Object?

1 Ответ

6 голосов
/ 04 февраля 2012

Да - потому что Double более конкретно, чем Object.Существует преобразование из Double в Object, но не наоборот, что делает его более конкретным.

См. раздел 15.12.2.5 JLS для получения дополнительной информации.,Детали довольно трудно понять, но это помогает:

Неформальная интуиция заключается в том, что один метод более специфичен, чем другой, если любой вызов, обработанный первым методом, может быть передан другому безошибка типа времени компиляции.

Так что здесь любой вызов display(Double doub) может быть обработан display(Object obj), но не наоборот.

...