В чем разница между override и overload в контексте ООП?

«В чем разница между override и overload в контексте ООП?» — вопрос из категории ООП, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Перегрузка (Overload) — это создание нескольких методов в одном классе с одинаковым именем, но разными параметрами (типом, количеством или порядком). Возвращаемый тип может отличаться, но только разницы в нём недостаточно для перегрузки.

Ключевые отличия:

  • Цель: Override меняет поведение унаследованного метода. Overload расширяет функциональность метода для разных входных данных.
  • Связь с наследованием: Override требует иерархии классов. Overload может быть в пределах одного класса.
  • Время разрешения: Override разрешается во время выполнения (динамический полиморфизм). Overload разрешается во время компиляции (статический полиморфизм).

Пример на Java:

class Animal {
    void makeSound() {
        System.out.println("Some generic animal sound");
    }
}

class Dog extends Animal {
    // Override: та же сигнатура, другая реализация.
    @Override
    void makeSound() {
        System.out.println("Bark!");
    }

    // Overload: то же имя, разные параметры.
    void makeSound(int volume) {
        System.out.println("Bark at volume: " + volume);
    }
}