Una regla general: pregúntese "¿Tiene sentido llamar a este método, incluso si todavía no se ha construido ningún objeto?" Si es así, definitivamente debería ser estático.
Entonces, en una clase Car
, podrías tener un método:
double convertMpgToKpl(double mpg)
... lo cual sería estático, porque uno podría querer saber a qué se convierte 35mpg, incluso si nadie ha construido alguna vez un Car
. Pero este método (que establece la eficiencia de un particular Car
):
void setMileage(double mpg)
... no puede ser estático ya que es inconcebible llamar al método antes de que Car
se haya construido ninguno .
(Por cierto, lo contrario no siempre es cierto: a veces puede tener un método que involucra dos Car
objetos, y aún así quiere que sea estático. Por ejemplo:
Car theMoreEfficientOf( Car c1, Car c2 )
Aunque esto podría convertirse a una versión no estática, algunos argumentarían que, dado que no existe una opción "privilegiada", lo cual Car
es más importante, no debe obligar a la persona que llama a elegir una Car
como el objeto que invocará. método en. Sin embargo, esta situación representa una fracción bastante pequeña de todos los métodos estáticos).