Modificateurs d'accès Java - public, private, protected et package
Les modificateurs sont des mots-clés que vous ajoutez à ces définitions pour en changer le sens. Le langage Java comporte une grande variété de modificateurs, notamment:
- Modificateurs d'accès Java
- Modificateurs sans accès
Pour utiliser un modificateur, vous devez inclure son mot-clé dans la définition d'une classe, d'une méthode ou d'une variable.
Exemple 1 :
public class Personne { private String nom; private int age; // private est un modificateur private static double salaire; public Personne(String nom, int age) { this.nom = nom; this.age = age; } // méthode principale (main) public static void main(String args[]) { // ou Personne.salaire salaire = 1000; // ou Personne.DEPARTMENT System.out.println("Département " + DEPARTMENT + " Salaire : " + salaire); } }
Modificateurs d'accès Java
Java fournit un certain nombre de modificateurs d'accès permettant de définir les niveaux d'accès pour les classes, les variables, les méthodes et les constructeurs. Les quatre niveaux d’accès sont :
- Visible pour le package, la valeur par défaut. Aucun modificateur n'est nécessaire.
- Visible seulement par la classe (private).
- Visible à tout le monde (public).
- Visible pour le package et toutes les sous-classes (protected).
Modificateur d'accès par défaut - Aucun mot clé
Le modificateur d'accès par défaut signifie que nous ne déclarons pas explicitement un modificateur d'accès pour une classe, un champ, une méthode, etc.
Une variable ou une méthode déclarée sans modificateur de contrôle d'accès est disponible pour toute autre classe du même package. Les champs d'une interface sont implicitement public static final et les méthodes d'une interface sont par défaut public.
Exemple 2 :
Les variables et les méthodes peuvent être déclarées sans aucun modificateur
public class Test{ int val1; void afficher(){ // ... } }
Modificateur d'accès privé - private
Les méthodes, les variables et les constructeurs déclarés privés ne sont accessibles que dans la classe déclarée elle-même.
Le modificateur d'accès privé est le niveau d'accès le plus restrictif. La classe et les interfaces ne peuvent pas être privées.
Les variables déclarées privées sont accessibles en dehors de la classe si des méthodes de lecture publiques sont présentes dans la classe. (getters setters )
L'utilisation du modificateur privé est la moyenne principale par laquelle un objet s'encapsule et cache les données du monde extérieur.
Exemple 3 :
public class Personne { private String nom; public Personne(String nom) { this.nom = nom; } public String getNom(){ return nom; } public void setNom(String nom){ this.nom=nom } }
Ici, la variable "nom" de la classe "Personne" est privée, il est donc impossible pour les autres classes d'extraire ou de modifier directement sa valeur.
Donc, pour rendre cette variable disponible au monde extérieur, nous avons défini deux méthodes publiques: getNom(), qui retourne la valeur de "nom", et setNom(String), qui définit sa valeur.
Modificateur d'accès publique - public
Une classe, une méthode, un constructeur, une interface, etc. déclarée publique peut être accessible à partir de n'importe quelle autre classe. Par conséquent, les champs, les méthodes et les blocs déclarés dans une classe publique sont accessibles à partir de toute classe appartenant à l'univers Java.
Toutefois, si la classe publique à laquelle vous essayez d'accéder se trouve dans un package différent, elle doit toujours être importée.
En raison de l'héritage, toutes les méthodes et variables publiques d'une classe sont héritées par ses sous-classes.
Exemple 4 :
public class Test{ public static void main(String args[]){ } }
La méthode main() d'une application doit être publique. Sinon, il ne pourrait pas être appelé par un interpréteur Java pour exécuter la classe.
Modificateur d'accès protégé - protected
Les variables, méthodes et constructeurs déclarés protégés dans une superclasse sont accessibles uniquement aux sous-classes d'un autre package ou de toute classe du package de la classe des membres protégés.
Le modificateur d'accès protégé ne peut pas être appliqué à la classe et aux interfaces. Les méthodes et les champs peuvent être déclarés protégés. Toutefois, les méthodes et les champs d'une interface ne peuvent pas être déclarés protégés.
L'accès protégé donne à la sous-classe une chance d'utiliser la méthode d'assistance(Helper) ou la variable, tout en empêchant une classe non liée d'essayer de l'utiliser.
Exemple 5 :
Dans cet exemple, nous allons créer deux packages p1 et p2. La classe A en p1 est rendue publique, pour y accéder en p2. La méthode afficher() dans la classe A est protégée et la classe B est héritée de la classe A. Vous pouvez ensuite accéder à cette méthode protégée en créant un objet de la classe B.
package p1; //Classe A public class A { protected void afficher() { System.out.println("Take it easy"); } }
package p2; import p1.*; //importer toutes les classes du paquet p1 //La classe B est une sous-classe de A class B extends A { public static void main(String args[]) { B obj = new B(); obj.afficher(); } }
Contrôle d'accès et héritage
Les règles suivantes pour les méthodes héritées sont appliquées
- Les méthodes déclarées publiques dans une super-classe doivent également être publiques dans toutes les sous-classes.
- Les méthodes déclarées protégées dans une superclasse doivent être soit protégées, soit publiques dans les sous-classes; elles ne peuvent pas être privées.
- Les méthodes déclarées privées ne sont pas du tout héritées, il n'y a donc pas de règle pour elles.