Почему в Java переопределение (override) статического метода не является таковым? Есть два класса, второй наследуется от первого:public class Test {
static public void doStuff() {
System.out.println("Test static method do stuff!");
}
}
public class TestChild extends Test {
static public void doStuff() {
System.out.println("TestChild static method do stuff!");
}
}
Всё работает, метод переопределяется. Однако, если на метод наследника повесить аннотацию @Override, то будет ошибка, текст которой гласит: Method does not override method from its superclass
Как же так? Ведь метод как раз таки переопределён!

21 Авг 2019 в 06:59
168 +1
0
Ответы
1

При работе с статическими методами в Java, переопределение на самом деле не происходит, так как статические методы принадлежат классу в целом, а не конкретному объекту. Когда вы объявляете метод в подклассе с тем же именем и сигнатурой, это не переопределение, а скрытие метода из суперкласса.

Когда вы используете аннотацию @Override, Java ожидает, что вы переопределите метод из суперкласса, то есть создадите метод с тем же именем, сигнатурой и возвращаемым типом в подклассе. Однако, так как статические методы не связаны с конкретным объектом, они не могут быть переопределены в подклассе.

Поэтому, несмотря на то, что ваш код работает исправно и метод "doStuff()" из суперкласса "Test" скрывается методом того же имени из подкласса "TestChild", аннотация @Override будет считаться ошибкой, так как Java не может выполнить переопределение статического метода.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир