JavaRush /Курсы /Java Syntax Pro /Перегрузка методов - overloading

Перегрузка методов - overloading

Java Syntax Pro
17 уровень , 4 лекция
Открыта

Перегрузка методов

И еще одна новая и интересная тема на сегодня — перегрузка методов. Или как ее еще часто называют, overloading (переопределение — это overriding).

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

Дело в том, что все методы внутри класса должны иметь уникальные имена. Так вот, это не совсем так. Вернее, совсем не так. Метод не должен иметь уникальное имя. Уникальным должно быть объединение имени и типов параметров этого метода. Такие объединения еще называют сигнатурами методов

Примеры:

Код Описание
public void print();
public void print2();
Так можно. Два метода имеют уникальные имена.
public void print();
public void print(int n);
И так можно. Два метода имеют уникальные имена (сигнатуры).
public void print(int n, int n2);
public void print(int n);
Все еще уникальные методы
public int print(int a);
public void print(int n);
А так нельзя. Методы — не уникальные. Хоть и возвращают разные типы.
public int print(int a, long b);
public long print(long b, int a);
А так — можно. Параметры методов уникальные.

В сигнатуру входит: имя метода и типы параметров. Не входит: тип результата метода и имена параметров. В классе не может быть двух методов с одинаковыми сигнатурами: компилятор не разберется, какой из них нужно вызвать.

Имена параметров роли не играют : они теряются при компиляции. После компиляции о методе известно только его имя и типы параметров. Тип результата не теряется, но результат функции не обязательно чему-то присваивать, поэтому его тоже не включают в сигнатуру.

Согласно принципам ООП, полиморфизм — это сокрытие различных реализаций за одним интерфейсом. А т.к. при вызове метода System.out.println(), например, в зависимости от параметров вызываются различные методы, формально это подпадает под определение полиморфизма.

Именно поэтому разные методы с одинаковыми именами, находящиеся в одном классе, принято считать хоть и слабой, но все же формой полиморфизма.


Комментарии (170)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Никита Уровень 37
31 июля 2025
Ох, как лениво..

public static int min(int a, int b, int c, int d, int e) {
    return Collections.min(List.of(a, b, c, d, e));
}
7 октября 2025
также сделал
Anonymous #3585174 Уровень 33
21 июля 2025
like
Aura Уровень 23
9 июля 2025
Боже иногда в шоке со своей тупости, никогда бы не додумался использовать предыдущие написанные методы, просто миллион раз писал Math.min()
Alpha Уровень 28
23 июня 2025
Сначало загнал числа в методах где 4 и 5 аргументов в массив и через перебор сранивил их, валидатор не принял, хотя по все тестам локалько все ок, да и эти алгоритмы сравнения все уже известны, читали и смотрели на "CS50", даже почему-то через Math.min и Math.max в цикле валидатор не захотел принимать. Короче не стал с валидатором воевать дальше и решил такой лайфхак написать:) int result = Math.min(Math.min(Math.min(Math.min(a,b), c), d), e);
Victor Уровень 36
11 февраля 2025
Я решил последнюю задачу "Минимальное и максимальное" с помощью ArrayList, там проверил список с помощью Collections.min и max. Сделал main, всё проверил. А валидатор сказал - "Задача не компилируется на сервере." Месяц работы - псу под хвост ((DOG) astronauts).
Alexander Ageenko Уровень 19
24 февраля 2025
ты на сайте это делал чтоли?
Victor Уровень 36
4 марта 2025
Я делал в IDEA - и оказалось, что в каких-то моментах валидатор не понимает использования var вместо конкретного типа. И как раз решение на сайте указало на эту ошибку - хотя вообще-то это ошибка валидатора.
Vitalii Shevchenko Уровень 1
12 марта 2025
Виконував завдання, через IDEA. За допомогою ArrayList i класу Сollections знайшов найбільше/найменше значення. Оформлено коротко і зрозуміло. Все ж через класичний масив наляписто було би.
Ilya Klimchev Уровень 25
22 января 2025
каждый следующий, переиспользуй предыдущего...и будет тебе счастье))
Faraway_is_close Уровень 24
7 января 2025
Диебаго. Лол.
Nazadain Уровень 39
25 октября 2024
На самом деле, эту задачу вполне можно было бы решить и без перегрузки, просто используя такую конструкцию

public void min(int... nums) {}
Жаль, условие не позволяет.
Rustam Уровень 3 Student
17 октября 2024
Какой-то легкий уровень после файлов и дат)
Bloodlicker Уровень 35
26 октября 2024
Да вроде даты были легкими...
Ilya Klimchev Уровень 25
21 января 2025
Они были нудными...я 2 месяца их мусолил)
Sergo Уровень 22
11 октября 2024
Знал бы я на адском уровне с массивами то, что решение данной задачи с использованием массива для меня окажется самым простым способом) Даже не вспомнил про Math )
Ринат Уровень 22
29 ноября 2024
А многомерные массивы? Я прошла афганскую войну