Что такое перегрузка методов (Overloading) в Java?

«Что такое перегрузка методов (Overloading) в Java?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Перегрузка методов (Method Overloading) — это возможность языка Java определять несколько методов в одном классе с одинаковым именем, но разными параметрами (сигнатурами). Компилятор выбирает нужный метод на основе переданных аргументов.

Критерии перегрузки (должно отличаться):

  • Тип параметров.
  • Количество параметров.
  • Порядок параметров (если типы разные).

Что НЕ является критерием перегрузки:

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

Пример:

public class Calculator {
    // Перегрузка по количеству параметров
    public int add(int a, int b) {
        return a + b;
    }
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // Перегрузка по типу параметров
    public double add(double a, double b) {
        return a + b;
    }

    // Перегрузка по порядку типов
    public void print(String str, int num) {}
    public void print(int num, String str) {} // Это другая сигнатура
}

Зачем это нужно? Для создания единого, интуитивно понятного интерфейса для операций, логически схожих, но работающих с разными типами или количеством данных (например, System.out.println()).