Найти в Дзене
DEBAGanov

Java 332. Какие правила следует соблюдать при переопределении метода?

При переопределении метода в Java необходимо следовать следующим правилам:

  • Имя и параметры метода в подклассе должны точно совпадать с именем и параметрами метода в суперклассе, который он переопределяет. Это называется сигнатурой метода.
  • Модификатор доступа метода в подклассе не должен быть менее ограничен, чем модификатор доступа метода в суперклассе. Например, если метод в суперклассе объявлен как public, то его переопределенная версия в подклассе также должна быть public или более ограничена.
  • Возвращаемый тип переопределенного метода должен быть одинаковым или являться подтипом возвращаемого типа в суперклассе.
  • Если метод в суперклассе объявлен как final, то его переопределение запрещено.
  • Если метод в суперклассе объявлен как static, то его переопределение не имеет смысла.
  • Конструкторы не могут быть переопределены, только скрыты (overloaded).
  • В переопределенном методе можно вызывать реализацию метода из суперкласса с помощью ключевого слова super.

Например, у нас есть класс Animal, который содержит метод makeSound():

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

Затем мы создаем подкласс Dog, который наследует этот метод от суперкласса и переопределяет его:

class Dog extends Animal {
@Override public void makeSound() {
System.out.println("Woof!");
}
}

В этом примере мы переопределили метод makeSound() в классе Dog. Имя и параметры метода точно совпадают с методом из суперкласса Animal. Модификатор доступа метода в подклассе (public) является не менее ограниченным, чем модификатор доступа метода в суперклассе (public). Возвращаемый тип метода в подклассе (void) является одинаковым с возвращаемым типом метода в суперклассе (void), и поэтому правила переопределения метода в Java соблюдены.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov