@Kolos90

Может ли статический метод вызывать не статический?

В книге "Полный справочник Java" Герберта Шилдта сказано: "На методы объявленные static, накладывается ряд ограничений.
- Они могут вызывать только другие статические методы.
...

но:

public class Main {
    
    public String nonStaticF1() {
        return "inside non static method";
    }

    public static void main(String[] args) {
        Main m1 = new Main();
        System.out.println(m1.nonStaticF1());
    }
}
//output:
//inside non static method


я вижу нестатический метод вызваный из статического. Что я не так понимаю?
  • Вопрос задан
  • 8214 просмотров
Решения вопроса 1
Vestail
@Vestail
Software Engineer
Вы создали экземпляр класса Main и вызвали метод экземпляра через ссылку на объект. В статическом методе могут вызываться методы экземпляра, если в нем создан сам экземпляр.
public static void main(String[] args) {
        //создание экземпляра и помещение ссылки на экземпляр в переменную m1
        Main m1 = new Main();
       //теперь через m1 есть доступ к методу nonStaticF1()
        System.out.println(m1.nonStaticF1());
    }

P. S. Пустые скобки при вызове метода без аргументов - обязательны. //nonStaticF1().
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@nirvimel
Нестатические методы - методы экземпляра класса.
Статические методы - методы самого класса.
Статический метод, не имея в распоряжении экземпляра класса, не может вызывать нестатический метод непонятно кого.
Имея экземпляр класса (m1 в примере) можно пользоваться его нестатическими методами откуда угодно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы