En Java, existe-t-il des règles claires pour savoir quand utiliser chacun des modificateurs d'accès, à savoir la valeur par défaut (package private), public
, protected
et private
, tout en faisant class
et interface
et en traitant l'héritage ?
[Le tutoriel officiel][1] peut vous être utile.
______________________________________________________________ | │ Class │ Package │ Subclass │ Subclass │ World | | │ │ │(same pkg)│(diff pkg)│ | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |public │ + │ + │ + │ + │ + | |───────────┼───────┼─────────┼──────────┼──────────┼────────| |protégé │ + │ + │ + │ + │ | |───────────┼───────┼─────────┼──────────┼──────────┼────────| | aucun modificateur│ + │ + │ + │ │ | │ |───────────┼───────┼─────────┼──────────┼──────────┼────────| |private │ + │ │ │ │ | |___________|_______|_________|__________|__________|________| + : accessible blanc : non accessible
[1] : http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
Règle simple. Commencez par déclarer tout ce qui est privé. Puis progressez vers le public au fur et à mesure que les besoins se font sentir et que la conception le justifie.
Lorsque vous exposez des membres, demandez-vous si vous exposez des choix de représentation ou d'abstraction. Le premier est à éviter car il introduira trop de dépendances sur la représentation réelle plutôt que sur son comportement observable.
En règle générale, j'essaie d'éviter de surcharger les implémentations de méthodes en sous-classant ; il est trop facile de bousiller la logique. Déclarez des méthodes abstraites protégées si vous souhaitez qu'elles soient surchargées.
De plus, utilisez l'annotation @Override pour éviter que les choses ne se brisent lors du remaniement.