Одне правило: запитайте себе: "Чи має сенс називати цей метод, навіть якщо жоден об'єкт ще не побудований?" Якщо так, то це безумовно має бути статичним.
Тож у класі у Car
вас може бути метод:
double convertMpgToKpl(double mpg)
... що було б статично, тому що, можливо, хочеться знати, в що перетворюється 35mpg, навіть якщо ніхто ніколи не будував Car
. Але цей метод (який встановлює ефективність одного конкретного Car
):
void setMileage(double mpg)
... не може бути статичним, оскільки неможливо викликати метод до того, як будь- Car
який був побудований.
(До речі, зворотне не завжди відповідає дійсності: іноді може бути метод, який включає два Car
об'єкти, і все-таки хочеться, щоб він був статичним. Наприклад:
Car theMoreEfficientOf( Car c1, Car c2 )
Хоча це може бути перетворене на нестатичну версію, деякі вважають, що оскільки не існує "привілейованого" вибору, який Car
важливіший, ви не повинні змушувати абонента вибирати його Car
як об'єкт, до якого будете викликати метод на. Однак ця ситуація становить досить малу частину всіх статичних методів.)