web-dev-qa-db-fra.com

La méthode statique en Java est accessible à l'aide d'une instance d'objet

En Java, des méthodes statiques sont créées pour y accéder sans aucune instance d'objet. Cela a du sens pour moi. Mais récemment, je suis tombé sur une chose étrange: la méthode statique en Java est également accessible via son instance d'objet. Cela me semble étrange. Est-ce que quelqu'un d'entre vous sait pourquoi cette fonctionnalité est fournie par Java? Quelle est l’importance de permettre l’accès aux méthodes statiques avec ou sans instance?

25
Rengasami Ramanujam

Cela présente l'avantage de vous permettre de transformer une méthode d'instance en méthode statique sans avoir à modifier le code existant (autre que la classe), ce qui permet une compatibilité ascendante. J'ai trouvé cela utile autant de fois que j'ai rencontré des méthodes utilitaires qui peuvent être rendues statiques - je peux simplement ajouter le modificateur static et continuer mon chemin.

19
Nate W.

Sémantiquement identique. Le compilateur est assez intelligent pour savoir ce que vous voulez dire (c'est-à-dire accéder à la méthode statique via la classe). Les IDEs vont vous avertir que c'est une mauvaise manière :)

Regardez cette question pour plus de détails . Comme ils disent, cela peut être trompeur et c'est pourquoi les IDE vont vous avertir. 

7
Dr G

C'est autorisé par la spécification, mais ce n'est pas recommandé. De plus, IDE comme Eclipse marque l’accès à une méthode statique sur une instance d’objet avec un avertissement.

2
lweller

bien qu’il soit mauvais, il n’ya aucune raison impérieuse de l’interdire non plus. 

o.f();

il faut donc trouver une méthode nommée f dans le cadre de o. On pourrait faire valoir qu'une f statique est bien sûr également dans la portée de o, même si f est en fait défini pour une portée plus grande (la classe de o)

1
irreputable