Метод считается переопределённым, когда в дочернем классе объявляется метод с той же сигнатурой (имя метода, количество и типы параметров в том же порядке), что и метод в родительском классе. При этом:
- Метод в родительском классе не должен быть объявлен как
final (или эквивалентным модификатором в других языках), запрещающим переопределение.
- Уровень доступа переопределённого метода в дочернем классе не может быть более ограничивающим, чем у метода в родительском классе.
- Переопределённый метод может возвращать тот же тип, что и метод в родительском классе, или ковариантный тип (подтип оригинального типа).
- Переопределённый метод не может выбрасывать исключения, которые являются более общими (или несовместимыми), чем исключения, объявленные в родительском методе.
- Статические методы не могут быть переопределены, только скрыты (hidden).
При вызове переопределённого метода через ссылку на родительский класс, но объект дочернего класса, выполняется версия метода из дочернего класса (полиморфизм).
java