Является ли перегрузка методов (overloading) частью полиморфизма в ООП?

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

Ответ

Да, перегрузка методов (method overloading) является формой статического (compile-time) полиморфизма.

Что такое перегрузка? Это возможность определять несколько методов в одной области видимости с одинаковым именем, но разными параметрами (тип, количество или порядок).

Пример:

class MathUtil {
    // Перегруженные методы add
    static int add(int a, int b) {
        return a + b;
    }
    static double add(double a, double b) {
        return a + b;
    }
    static int add(int a, int b, int c) {
        return a + b + c;
    }
}
// Использование:
int sum1 = MathUtil.add(5, 10);       // Вызовется add(int, int)
double sum2 = MathUtil.add(5.5, 2.3); // Вызовется add(double, double)

Ключевые характеристики статического полиморфизма через перегрузку:

  • Разрешение на этапе компиляции: Компилятор однозначно определяет, какой метод вызвать, на основе сигнатуры (имя + аргументы).
  • Не зависит от типа объекта времени выполнения.
  • Возвращаемый тип не учитывается при перегрузке (два метода с одинаковыми параметрами, но разным возвращаемым типом, приведут к ошибке компиляции).

Контраст с динамическим полиморфизмом:

  • Перегрузка (Static Polymorphism): Решение принимает компилятор. Один класс, много методов с одним именем.
  • Переопределение (Dynamic Polymorphism / Overriding): Решение принимает JVM во время выполнения (runtime). Родительский класс и подклассы, один метод, разная реализация.