Можно ли переопределить статический метод?
Чтобы правильно ответить на данный вопрос нужно понимать, что перегрузка метода и его переопределение – это разные понятия.
Сначала рассмотрим перегрузку. Компилятор 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!"
Бесплатные Telegram-боты для обучения
Практика с проверкой кода и помощью ИИ-ментора
AndroidSprint AI Mentor
Проверяет Pull Request'ы в GitHub, проводит тестовые собеседования с голосом и таймером, помогает разбираться с кодом 24/7
Попробовать ИИ-ментора →KotlinSprint Bot
22 урока Kotlin, 220 тестов, 120 практических задач с код-ревью
Начать обучение Kotlin →