Historique de la question :
Le contrôle du niveau d'accès aux données et méthodes en Java a été introduit pour assurer l'encapsulation et protéger l'architecture interne des classes. C'est une partie importante de la POO, permettant de cacher l'implémentation et d'éviter les modifications non autorisées de l'état des objets.
Problème :
Les différents modificateurs d'accès — public, protected, (package-private), private — limitent différemment la portée des membres de classe, ce qui est souvent non évident. Un niveau mal choisi peut entraîner des bogues, une extension indésirable des droits, une violation de l'encapsulation.
Solution :
Utiliser le modificateur d'accès minim nécessaire pour chaque champ ou méthode. Java prend en charge :
Exemple de code :
public class Dog { private String name; // visible uniquement à l'intérieur de Dog String breed; // package-private protected int age; // visible dans le package et dans les héritiers public void bark() { // accessible depuis n'importe quel code System.out.println("Woof!"); } }
Caractéristiques clés :
Un classe interne (inner) peut-elle accéder à tous les champs private de la classe externe ?
Oui, la classe interne a totalement accès à tous les champs et méthodes de la classe externe, même private. Et vice versa, la classe externe peut accéder aux membres private de la classe interne, si elle possède son instance.
Un membre protected de la classe peut-il être accessible en dehors du package sans héritage ?
Non. En dehors du package, protected est pratique uniquement pour les héritiers. Juste ainsi, via un objet de la classe dans un autre package — c'est impossible.
Que se passe-t-il si une classe n'est pas déclarée public, mais est importée depuis un autre package ?
Une classe avec un niveau package-private ne peut pas être importée et utilisée explicitement en dehors de son package. Essayer d'y accéder depuis le code d'un autre package entraînera une erreur de compilation.
Cas négatif
Tous les champs de la classe DTO sont marqués comme public pour simplifier l'accès.
Avantages :
Inconvénients :
Cas positif
Utilisation de champs private et de méthodes d'accès publiques.
Avantages :
Inconvénients :