it-swarm-ru.tech

Доступ к статическому методу в Java можно получить с помощью экземпляра объекта

В Java статические методы создаются для доступа к нему без какого-либо экземпляра объекта. Это имеет некоторый смысл для меня. Но недавно я натолкнулся на одну странную вещь: к статическому методу в Java можно получить доступ через его экземпляр объекта. Это выглядит довольно странно для меня. Кто-нибудь из вас знает, почему эта функция предоставляется Java? Какое значение имеет возможность доступа к статическим методам, а также к экземплярам?

25
Rengasami Ramanujam

Преимущество этого состоит в том, что он позволяет вам брать метод экземпляра и превращать его в статический метод без необходимости изменять какой-либо существующий код (кроме класса) и, таким образом, обеспечивать обратную совместимость. Я нашел это полезным, как много раз я сталкивался с служебными методами, которые можно сделать статическими - я могу просто добавить модификатор static и продолжить свой путь.

19
Nate W.

Семантически идентичны. Компилятор достаточно умен, чтобы понять, что вы имеете в виду (то есть получить доступ к статическому методу через класс). IDE предупредит вас, что это плохие манеры :)

Посмотрите на этот вопрос для более подробной информации . Как говорится, это может вводить в заблуждение, и поэтому IDE предупредит вас. 

7
Dr G

Это разрешено спецификацией, но не рекомендуется. Более того, IDE, например Eclipse, помечает доступ к статическому методу на экземпляре объекта предупреждением.

2
lweller

в то время как это плохо, нет никаких веских причин, чтобы запретить это тоже. 

o.f();

поэтому нам нужно найти метод с именем f в области действия o. Можно утверждать, что статическая f, разумеется, также входит в область действия o, хотя f фактически определена для большей области (класс o)

1
irreputable