Одно практическое правило: спросите себя, имеет ли смысл вызывать этот метод, даже если объект еще не создан? Если да, то он определенно должен быть статичным.
Итак, в классе Car
у вас может быть метод:
double convertMpgToKpl(double mpg)
... что было бы статично, потому что кто-то может захотеть узнать, во что конвертируется 35 миль на галлон, даже если никто никогда не строил Car
. Но этот метод (который устанавливает эффективность одного конкретного Car
):
void setMileage(double mpg)
... не может быть статическим, так как невозможно вызвать метод до создания какого-либо Car
.
(Между прочим, обратное не всегда верно: иногда у вас может быть метод, который включает два Car
объекта, и при этом он все равно должен быть статическим. Например:
Car theMoreEfficientOf(Car c1, Car c2)
Хотя это может быть преобразовано в нестатическую версию, некоторые утверждают, что, поскольку нет привилегированного выбора того, какой Car
более важен, вы не должны заставлять вызывающего абонента выбирать один Car
в качестве объекта, который будет вызывать метод на. Однако на эту ситуацию приходится довольно небольшая часть всех статических методов.
person
not-just-yeti
schedule
19.04.2010