Accéder aux modificateurs en Java

1. Vue d'ensemble

Dans ce tutoriel, nous allons passer en revue les modificateurs d'accès en Java, qui sont utilisés pour définir le niveau d'accès aux classes, variables, méthodes et constructeurs.

En termes simples, il existe quatre modificateurs d'accès: public , privé , protégé et par défaut (pas de mot clé).

Avant de commencer, notons qu'une classe de niveau supérieur ne peut utiliser que des modificateurs d'accès publics ou par défaut . Au niveau des membres, nous pouvons utiliser les quatre.

2. Par défaut

Lorsque nous n'utilisons aucun mot-clé explicitement, Java définit un accès par défaut à une classe, une méthode ou une propriété donnée. Le modificateur d'accès par défaut est également appelé package-private , ce qui signifie que tous les membres sont visibles dans le même package mais ne sont pas accessibles à partir d'autres packages:

package com.baeldung.accessmodifiers; public class SuperPublic { static void defaultMethod() { ... } }

defaultMethod () est accessible dans une autre classe du même package:

package com.baeldung.accessmodifiers; public class Public { public Public() { SuperPublic.defaultMethod(); // Available in the same package. } }

Cependant, il n'est pas disponible dans d'autres packages.

3. Publique

Si nous ajoutons le mot clé public à une classe, une méthode ou une propriété, nous le rendons disponible au monde entier , c'est-à-dire que toutes les autres classes de tous les packages pourront l'utiliser. C'est le modificateur d'accès le moins restrictif:

package com.baeldung.accessmodifiers; public class SuperPublic { public static void publicMethod() { ... } }

publicMethod () est disponible dans un autre package:

package com.baeldung.accessmodifiers.another; import com.baeldung.accessmodifiers.SuperPublic; public class AnotherPublic { public AnotherPublic() { SuperPublic.publicMethod(); // Available everywhere. Let's note different package. } }

Pour plus de détails sur le comportement du mot clé public lorsqu'il est appliqué à une classe, une interface, une classe publique imbriquée ou une interface et une méthode, consultez l'article dédié.

4. Privé

Toute méthode, propriété ou constructeur avec le mot clé private est accessible à partir de la même classe uniquement . C'est le modificateur d'accès le plus restrictif et il est au cœur du concept d'encapsulation. Toutes les données seront cachées du monde extérieur:

package com.baeldung.accessmodifiers; public class SuperPublic { static private void privateMethod() { ... } private void anotherPrivateMethod() { privateMethod(); // available in the same class only. } }

Cet article plus détaillé montrera comment le mot clé private se comporte lorsqu'il est appliqué à un champ, un constructeur, une méthode et à une classe interne.

5. Protégé

Entre les niveaux d'accès public et privé , il y a le modificateur d'accès protégé .

Si nous déclarons une méthode, une propriété ou un constructeur avec le mot clé protected , nous pouvons accéder au membre à partir du même package (comme avec le niveau d'accès package-private ) et en plus de toutes les sous-classes de sa classe , même si elles se trouvent dans d'autres packages:

package com.baeldung.accessmodifiers; public class SuperPublic { static protected void protectedMethod() { ... } }

protectedMethod () est disponible dans les sous-classes (quel que soit le package):

package com.baeldung.accessmodifiers.another; import com.baeldung.accessmodifiers.SuperPublic; public class AnotherSubClass extends SuperPublic { public AnotherSubClass() { SuperPublic.protectedMethod(); // Available in subclass. Let's note different package. } }

L'article dédié décrit plus en détail le mot clé lorsqu'il est utilisé dans un champ, une méthode, un constructeur, une classe interne et l'accessibilité dans le même package ou dans un package différent.

6. Comparaison

Le tableau ci-dessous résume les modificateurs d'accès disponibles. On voit qu'une classe, quels que soient les modificateurs d'accès utilisés, a toujours accès à ses membres:

Modificateur Classe Paquet Sous-classe Monde
Publique
Oui Oui Oui Oui
protégé
Oui Oui Oui N
défaut
Oui Oui N N
privé
Oui N N N

7. Conclusion

Dans ce court article, nous avons passé en revue les modificateurs d'accès en Java.

Il est recommandé d'utiliser le niveau d'accès le plus restrictif possible pour un membre donné afin d'éviter toute utilisation abusive. Nous devrions toujours utiliser le modificateur d'accès privé à moins qu'il n'y ait une bonne raison de ne pas le faire.

Le niveau d'accès public ne doit être utilisé que si un membre fait partie d'une API.

Comme toujours, les exemples de code sont disponibles à l'adresse over sur Github.