Modificateurs d’accès en Java

Modificateurs d'accès en Java

1. Vue d'ensemble

Dans ce didacticiel, 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.

Simply put, there are four access modifiers:public,private,protected etdefault (pas de mot clé).

Avant de commencer, notons qu'une classe de premier niveau ne peut utiliser que les modificateurs d'accèspublic oudefault. Au niveau des membres, nous pouvons utiliser les quatre.

2. Défaut

Lorsque nous n'utilisons aucun mot-clé explicitement, Java définit un accèsdefault à 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 queall members are visible within the same package mais ne sont pas accessibles depuis d'autres packages:

package com.example.accessmodifiers;

public class SuperPublic {
    static void defaultMethod() {
        ...
    }
}

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

package com.example.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é alorswe’re making it available to the whole world, c'est-à-dire toutes les autres classes de tous les packages pourront l'utiliser. C'est le modificateur d'accès le moins restrictif:

package com.example.accessmodifiers;

public class SuperPublic {
    public static void publicMethod() {
        ...
    }
}

publicMethod() est disponible dans un autre package:

package com.example.accessmodifiers.another;

import com.example.accessmodifiers.SuperPublic;

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

4. Privé

Toute méthode, propriété ou constructeur avec le mot-cléprivateis accessible from the same class only. 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.example.accessmodifiers;

public class SuperPublic {
    static private void privateMethod() {
        ...
    }

     private void anotherPrivateMethod() {
         privateMethod(); // available in the same class only.
    }
}

5. Protégé

Entre les niveaux d'accèspublic etprivate, il y a le modificateur d'accèsprotected.

Si nous déclarons une méthode, une propriété ou un constructeur avec le mot-cléprotected, nous pouvons accéder au membre depuis lessame package (as with package-private access level) and in addition from all subclasses of its class, même s'ils se trouvent dans d'autres packages:

package com.example.accessmodifiers;

public class SuperPublic {
    static protected void protectedMethod() {
        ...
    }
}

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

package com.example.accessmodifiers.another;

import com.example.accessmodifiers.SuperPublic;

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

6. Comparaison

Le tableau ci-dessous récapitule les modificateurs d'accès disponibles. Nous pouvons voir 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

public

Y

Y

Y

Y

protected

Y

Y

Y

N

default

Y

Y

N

N

private

Y

N

N

N

7. Conclusion

Dans ce court article, nous avons examiné 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èsprivate sauf s'il y a une bonne raison de ne pas le faire.

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

Comme toujours, les exemples de code sont disponiblesover on Github.