Можно ли переопределить статический метод?

Чтобы правильно ответить на данный вопрос нужно понимать, что перегрузка метода и его переопределение – это разные понятия.

Сначала рассмотрим перегрузку. Компилятор Java рассматривает методы с отличающимися параметрами как разные, поэтому не существует никаких ограничений.

Статические методы действуют на весь класс, а не к его экземплярам, здесь применяется статическое связывание, а значит, переопределить данный метод в дочернем классе невозможно.

Однако в дочернем классе не запрещено объявлять static-метод с теми же параметрами. Такая конструкция в Java называется перекрытие. В этом методе запрещено указывать слово super и аннотацию @Override.

class Base {
  static void prntMe() {
    System.out.prntln("Base!");
  }
}
class Child extends Base {
  static vod printMe() {
    System.out.prntln("Child!");
  }
}
Base instance = new Child();
instance.printMe(); // Хоть объект и Child, напечатается "Base!"
Поделиться уроком

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *