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

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

Открыта

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

И еще одна новая и интересная тема на сегодня — перегрузка методов. Или как ее еще часто называют, 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(), например, в зависимости от параметров вызываются различные методы, формально это подпадает под определение полиморфизма.

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


Комментарии (171)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Grigoryvvv
Уровень 28
Expert
18 июля, 16:35
18.07.2026 / 18 уровень
Никита
Уровень 1
31 июля 2025, 17:42
Ох, как лениво..
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, 14:39
также сделал
Anonymous #3585174
Уровень 33
21 июля 2025, 14:35
like
Aura
Уровень 23
9 июля 2025, 03:25
Боже иногда в шоке со своей тупости, никогда бы не додумался использовать предыдущие написанные методы, просто миллион раз писал Math.min()
Rei
Уровень 32
11 февраля, 07:15
Зря вы обесцениваете свою профессиональную грамотность) Math.min/max: ничего не создаёт не делает автобоксинг просто сравнивает числа 👉 Для такой задачи правильнее использовать Math. Например:
public static int min(int a, int b) {
    return Math.min(a, b);
}

public static int min(int a, int b, int c) {
    return Math.min(min(a, b), c);
}

public static int min(int a, int b, int c, int d) {
    return min(min(a, b, c), d);
}

public static int min(int a, int b, int c, int d, int e) {
    return min(min(a, b, c, d), e);
}
🔹 Чисто 🔹 Без лишних объектов 🔹 Без коллекций 🔹 Логично 🔹 Используется уже написанный код Это профессиональнее для такой задачи.
Alpha
Уровень 42
23 июня 2025, 11:10
Сначало загнал числа в методах где 4 и 5 аргументов в массив и через перебор сранивил их, валидатор не принял, хотя по все тестам локалько все ок, да и эти алгоритмы сравнения все уже известны, читали и смотрели на "CS50", даже почему-то через Math.min и Math.max в цикле валидатор не захотел принимать. Короче не стал с валидатором воевать дальше и решил такой лайфхак написать:) int result = Math.min(Math.min(Math.min(Math.min(a,b), c), d), e);
VictorThe main expert in Automa в Строительная компани
11 февраля 2025, 10:40
Я решил последнюю задачу "Минимальное и максимальное" с помощью ArrayList, там проверил список с помощью Collections.min и max. Сделал main, всё проверил. А валидатор сказал - "Задача не компилируется на сервере." Месяц работы - псу под хвост ((DOG) astronauts).
Alexander Ageenko
Уровень 19
24 февраля 2025, 17:48
ты на сайте это делал чтоли?
VictorThe main expert in Automa в Строительная компани
4 марта 2025, 12:44
Я делал в IDEA - и оказалось, что в каких-то моментах валидатор не понимает использования var вместо конкретного типа. И как раз решение на сайте указало на эту ошибку - хотя вообще-то это ошибка валидатора.
Vitalii Shevchenko
Уровень 1
12 марта 2025, 04:47
Виконував завдання, через IDEA. За допомогою ArrayList i класу Сollections знайшов найбільше/найменше значення. Оформлено коротко і зрозуміло. Все ж через класичний масив наляписто було би.
Ilya Klimchev Backend Developer
22 января 2025, 21:05
каждый следующий, переиспользуй предыдущего...и будет тебе счастье))
Faraway_is_close
Уровень 24
7 января 2025, 17:43
Диебаго. Лол.
Nazadain
Уровень 39
25 октября 2024, 10:57
На самом деле, эту задачу вполне можно было бы решить и без перегрузки, просто используя такую конструкцию
public void min(int... nums) {}
Жаль, условие не позволяет.
RustamJava Developer в t.me/jroom_chatStudent
17 октября 2024, 09:01
Какой-то легкий уровень после файлов и дат)
Bloodlicker
Уровень 35
26 октября 2024, 16:44
Да вроде даты были легкими...
Ilya Klimchev Backend Developer
21 января 2025, 11:31
Они были нудными...я 2 месяца их мусолил)