Всем привет.
Поясните такой момент.
В этой задаче используются два метода с аналогичным названием (min).
Одному методу передается два аргумента, другому четыре:
public static int min(int a, int b, int c, int d)
public static int min(int a, int b)
Сам запрос в main:
System.out.println(min(-20, -10))
System.out.println(min(-40, -10, -30, 40))
Так вот теперь вопрос мой, потому что не понимаю теорию.
Допустим выполнение дошло до этой строчки:
System.out.println(min(-40, -10, -30, 40))
Как устроен алгоритм обращения к min ?
Их ведь два метода, с одинаковыми именами.
Почему программа, например, не передает в min(a,b) четыре значения, из которых два зануляет?
Другими словами , почему все работает?
Сначала обращается к min(a,b) , а потом к min(a,b,c,d).
Или выполнение обращается ко всем методам, название которых совпадает ?
Ilya
22 уровень
Вопрос по обращению к методу.
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ilya
11 сентября 2019, 22:03
Спасибо, все понятно.
0
Андрей
8 сентября 2019, 09:53
программа обращается к методам с тем количеством, с тем типом переменных, и в том порядке которые указаны в аргументах. PS. присоединюсь к ответу товарища из екатеринодара!
Veryprosto20 уровень, Екатеринодар
0
Wladyslaw Java Developer Master
7 сентября 2019, 20:01
Так устроен компилятор. Разрешение перегруженных методов происходит в момент компиляции. Гуглить - раннее и позднее связывание ну и, собственно, разрешение перегруженных методов.
В общих чертах - он ищет метод с совпадающей сигнатурой( имя метода, количество тип и порядок параметров, имена параметров значения не имеют) и если находит такой - то он и будет вызван. Если нет - программа не скомпилируется. Два метода с одинаковой сигнатурой компилятор тоже не пропустит.
+1
Veryprosto
7 сентября 2019, 19:21
программа обращается к методам с тем количеством, с тем типом переменных, и в том порядке которые указаны в аргументах. Например если будет ещё два метода - public static String min(int a, String b) и public static String min(String a, int b)
если в коде написать min(555, "bla-bla"); то программа обратиться именно к методу который обрабатывает переменные такого типа, в таком порядке
+3