En Java, pour gérer l'accès aux champs, méthodes et classes, on utilise des modificateurs d'accès : private, default (package-private), protected, public.
Historique de la question :
Les premières versions de Java utilisaient une encapsulation d'objet stricte. Pour plus de flexibilité, différents niveaux d'accès ont été introduits pour supporter à la fois une encapsulation totale et une extensibilité (héritage et accès au niveau du package).
Problème :
Un choix de modificateur incorrect peut entraîner une violation de l'encapsulation, des problèmes d'héritage, une impossibilité de test ou même des bugs de sécurité si des données deviennent publiques par erreur.
Solution :
Utilisez le modificateur le plus restrictif que votre architecture permet. Les champs sont généralement déclarés private, avec un accès à travers des getters/setters. Les méthodes sont déclarées public uniquement si elles font partie de l'API, et protected pour l'extension.
Exemple de code :
public class Person { private String name; // champ privé protected int age; // accessible dans le package et aux héritiers String email; // package-private public String getName() { return name; } }
Caractéristiques clés :
private — accessible uniquement à l'intérieur de la classeprotected — accès aux héritiers même depuis d'autres packagespublic — accessible à tousPeut-on appliquer un modificateur d'accès aux variables locales ?
Non. Les modificateurs d'accès ne s'appliquent qu'aux classes, méthodes et champs/classes internes, mais pas aux variables locales.
Peut-on faire une classe à l'intérieur d'une méthode avec le modificateur public ?
Non. Une classe locale ne peut pas être déclarée avec un modificateur d'accès, elle a toujours une portée à l'intérieur de la méthode.
Un membre protected est-il accessible par une classe fille dans un autre package ?
Oui, les membres protected sont accessibles aux héritiers, même s'ils se trouvent dans d'autres packages, mais pas aux classes ordinaires dans un autre package.
Tous les champs de la classe sont accidentellement déclarés public — ils sont accessibles directement depuis d'autres classes, rendant difficile le suivi des modifications.
Avantages :
Inconvénients :
Tous les champs sont privés, et les méthodes publiques contrôlent l'accès avec validation, seules les parties nécessaires sont déclarées protected pour l'extension dans les héritiers.
Avantages :
Inconvénients :