Ответ
Да, может, но при соблюдении строгих условий. Переопределение (override) — ключевой механизм полиморфизма в ООП.
Условия для переопределения:
- Метод в родительском классе не должен быть объявлен как
final,privateилиstatic. - Сигнатура метода (имя, тип и порядок параметров) должна совпадать.
- Возвращаемый тип должен быть совместим (тот же тип или его подтип — ковариантный возвращаемый тип).
- Модификатор доступа не может быть более строгим, чем у родительского метода.
Пример корректного переопределения:
class Vehicle {
protected String getDescription() {
return "Транспортное средство";
}
}
class Car extends Vehicle {
@Override // Аннотация помогает компилятору проверить переопределение
public String getDescription() {
return "Автомобиль: " + super.getDescription();
}
}
Важные исключения:
privateметоды не наследуются, поэтому их нельзя переопределить.staticметоды скрываются (hide), а не переопределяются.- Аннотация
@Override— лучшая практика для явного указания намерения и проверки компилятором.