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

«Что такое перегрузка методов (method overloading)?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример на Java:

public class MathHelper {
    // Версия 1: сложение двух целых чисел
    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 String add(String a, int b) {
        return a + b;
    }
}

// Использование:
MathHelper helper = new MathHelper();
System.out.println(helper.add(5, 10));        // Вызовет add(int, int) -> 15
System.out.println(helper.add(2.5, 3.7));     // Вызовет add(double, double) -> 6.2

Важные особенности:

  • Возвращаемый тип НЕ является частью сигнатуры для перегрузки. Нельзя иметь два метода с одинаковыми параметрами, но разными возвращаемыми типами.
  • Перегрузка относится к статическому (раннему) связыванию. Выбор метода происходит на этапе компиляции на основе типов ссылок.
  • В языках с динамической типизацией (например, Python) перегрузка в классическом виде не поддерживается, но может быть эмулирована с использованием аргументов по умолчанию или проверки типов внутри метода.