Ответ
Переопределение метода (Method Overriding) — это механизм ООП, позволяющий дочернему классу предоставить свою, специфическую реализацию метода, который уже существует в родительском классе. Цель — изменить или расширить поведение унаследованного метода.
Основные правила:
- Сигнатура (имя, список параметров, тип возвращаемого значения) должна полностью совпадать.
- Используется аннотация
@Override(строго рекомендуется). Она заставляет компилятор проверить, действительно ли метод переопределяет родительский, и предотвращает ошибки. - Уровень доступа переопределяющего метода не может быть более строгим, чем у родительского (можно
protected->public, но неpublic->private). - Нельзя переопределить:
finalметоды.staticметоды (это скрытие метода, а не переопределение).privateметоды (они невидимы для подкласса).
Пример:
class Animal {
// Метод, который будет переопределен
public void makeSound() {
System.out.println("The animal makes a sound.");
}
}
class Dog extends Animal {
@Override // Аннотация для проверки
public void makeSound() {
// Специфичная реализация для Dog
System.out.println("The dog barks: Woof!");
}
}
// Использование
Animal myAnimal = new Dog();
myAnimal.makeSound(); // Вывод: "The dog barks: Woof!" (Полиморфизм)
Связь с полиморфизмом: Переопределение — основа для полиморфизма времени выполнения (Runtime Polymorphism), когда вызываемый метод определяется типом фактического объекта, а не типом ссылки.