+ 1
Можно ли переопределять или перегружать статические методы в Java?
https://code.sololearn.com/c5qiFCG71pXY/?ref=app Почему нет, если в данном примере всё работает? Или я что-то не понимаю до конца.
3 ответов
+ 1
Вы не можете переопределить статические методы ... Если вы так пишете, это не отменяет ... Делает отдельные индивидуальные методы ... Принадлежит к собственным классам, не связанным с наследованием ...
Edit : Eleonora Lyonesse
You cannot override static methods.. If you write like that, it's not overriding.. It's making separate individual methods.. Belong to there own classes, not related to inheritance..
Check this code for differences by removing static and with static..
public class Program
{
public static void main(String[] args){
StaticB b = new StaticB();
b.staticMethod1();
b.staticMethod1("overloaded ");
StaticA a=(StaticA)b;
a.staticMethod1();
a.staticMethod1("overloaded ");
}
}
+ 1
Перегружать можно, переопределять нет. В случае со статическими методами это не переопределение (overriding), а сокрытие (hiding).
https://code.sololearn.com/cdM83k5vWW4U/?ref=app
Статические методы пренадлежат классу, а не экземпляру класса. Какой метод вызовется определяется на этапе компиляции, а не по ходу выполнения программы. Поэтому когда вы "переопределяете" статический метод, на самом деле вы создаете новый. По коду выше видно, что статические методы вызываются по типу ссылки, а не статические по типу объекта, на которые ссылки указывают.