Что такое переопределение метода в ООП?

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

Ответ

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

Ключевые условия для корректного переопределения:

  1. Сигнатура метода (имя, список параметров и их типы) должна совпадать.
  2. Возвращаемый тип должен быть совместим (тот же тип или его подтип — ковариантный возвращаемый тип).
  3. Модификатор доступа не может быть более строгим, чем у родительского метода (например, нельзя переопределить protected метод как private).
  4. Нельзя переопределить методы, объявленные как final, static или private.

Практический пример на Java:

class Animal {
    // Базовый метод
    public void makeSound() {
        System.out.println("Some generic animal sound");
    }
}

class Dog extends Animal {
    // Переопределенный метод с собственной реализацией
    @Override
    public void makeSound() {
        System.out.println("Bark!");
    }
}

// Использование
Animal myAnimal = new Dog();
myAnimal.makeSound(); // Вывод: "Bark!" (вызывается переопределенная версия)

Зачем это нужно? Переопределение — основа полиморфизма. Оно позволяет работать с объектами разных классов через общий интерфейс базового класса, но выполнять их специфичное поведение.