Почему в 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
191 +1
0
Ответы
1

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

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

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

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