почему я не получаю ссылку на метод неоднозначно в следующем коде?

У меня есть базовый или родительский класс, у которого есть перегрузка method1 (int, int) и method1 (double, double)

public class Sub extends Base{
    @overridden
    method1(double,double) {`some manipulation`}

    main{
       method1(1,1); //i am not getting Compile Error(reference to method is ambiguous)!in java
    }

} like so but what is the case here? публичный класс Test3 {public static void JavaHungry (Exception e) {}

public static void JavaHungry(ArithmeticException e) {}

public static void JavaHungry(String s) {}

public static void main(String[] args) {

JavaHungry(null);`refernce to method is ambiguous`
}

}


person Niraj Jain    schedule 04.05.2020    source источник
comment
Прежде всего, пожалуйста, отформатируйте код правильно - так как он не может быть правильно просмотрен как код.   -  person Ketan    schedule 04.05.2020
comment
1 - это int, а не double   -  person Stultuske    schedule 04.05.2020
comment
Это недопустимый код Java. Предоставьте полный компилируемый пример со всеми необходимыми классами. Короткий ответ заключается в том, что вы не получаете неоднозначную ошибку компиляции, потому что вызов метода не является неоднозначным. Но мы не можем объяснить это без полного примера. Или что-то от вас, чтобы сказать, почему вы думаете, что это должно быть двусмысленным.   -  person Stephen C    schedule 04.05.2020
comment
@StephenC Я привел один пример ниже, где я получаю неоднозначную ошибку метода ... вот почему я подумал, что и здесь, я получу то же самое, но теперь это ясно.   -  person Niraj Jain    schedule 04.05.2020
comment
Поместите свой новый пример в вопрос. Но учтите, что это не объясняет, почему вы ›› думаете ‹<, что ваш существующий пример ›› должен ‹** быть двусмысленным. И эти два примера различны во многих отношениях. Если вы хотите получить хороший ответ, вам придется написать хороший вопрос.   -  person Stephen C    schedule 04.05.2020
comment
Мне было интересно узнать об этой концепции, но позже я понял из JLS, что java будет видеть наиболее конкретный метод для данных параметров. @ StephenC   -  person Niraj Jain    schedule 04.05.2020


Ответы (1)


В Java int представлен 1, а double представлен 1.0.

Следовательно, когда вы вызываете method1(1, 1), он вызывает метод с аргументами типа int.

Для компилятора Java это не неоднозначно.

Вкратце, ниже приведены вызовы, которые будут происходить при передаче этих типов значений.

method1(1, 1) -> целое, целое

method1(1.0, 1) -> double, double (компилятор с автоматическим преобразованием 1 в double)

method1(1.0, 1.0) -> двойной, двойной

person Ketan    schedule 04.05.2020