sum
здесь является методом экземпляра, потому что он не static
и требует экземпляр объекта. Вы создаете свой экземпляр здесь:
Main ob = new Main();
В данном конкретном случае sum
действительно может быть сделано static
, немного упрощая код, не требуя экземпляра.
I прочитали, что если метод является методом экземпляра, он должен обращаться к переменной экземпляра
I подозреваемого то, что вы читали, предполагает, что если метод не взаимодействует с экземпляром в все тогда наверное должно быть static
. Где-то в тексте может быть упоминание о термине «чистая функция» .
Я бы не стал go говорить, что все потенциально static
методы везде надо сделать static
как универсальное правило. На самом деле все сводится к семантике самого объекта. Поскольку объект, который у вас здесь, имеет очень маленький семанти c контекст, этот крошечный пример может легко go в любом случае.
Но предположим, что вы расширили свой объект, включив в него методы для subtract
, multiply
, divide
, и c. Предположим, что по мере расширения объекта один или несколько дополнительных методов использовали переменные экземпляра. Было бы неприятно иметь объект с несколькими семантически похожими методами, некоторые из которых static
, а некоторые нет.
Вместо того, чтобы сосредоточиться на каком-то конкретном правиле, которое кто-то вам дает, сосредоточьтесь на на том, что вы собираетесь построить в качестве своего объекта. Если вы думаете, что должно быть static
, сделайте это как таковое. Если вы чувствуете, что этого не должно быть, не делайте этого. Если вы не уверены, то в качестве упражнения выполните и то, и другое и посмотрите, что вы предпочитаете в данном конкретном случае.
Важно заглядывать в планы на будущее для того, что вы собираетесь создать, потому что чем больше у вас кода полагаясь на ваш объект во всем приложении, тем сложнее будет перейти с static
на экземпляр или наоборот.