Contenu du cours
Java Avancé
Java Avancé
Modificateur Private
Comment masquer des champs et des méthodes à une autre classe ?
Les modificateurs d'accès sont utilisés pour contrôler la visibilité et l'accessibilité des variables et des méthodes en Java. Ils permettent de définir la portée et de restreindre l'accès à certains membres d'une classe.
Nous avons déjà abordé les modificateurs d'accès dans la section précédente. À présent, examinons de plus près le modificateur d'accès le plus couramment utilisé : private
.
Comme vous le savez, avec le modificateur d'accès private
, il est uniquement possible d'accéder à un champ ou une méthode depuis la classe dans laquelle il se trouve. Observons un exemple d'utilisation du modificateur private
:
Par exemple, si l'on souhaite qu'une variable d'une classe ne soit ni visible ni accessible depuis une autre classe, il est possible d'utiliser le modificateur d'accès private
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.name = "Bob"; System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; }
Nous avons déclaré les champs de la classe Person
comme private
. Lorsque nous essayons d'initialiser directement le champ, une erreur se produit indiquant que le champ name
possède un modificateur d'accès private
et n'est pas accessible pour l'appel ou la modification dans la méthode main.
Comment initialiser un champ privé ?
La manière la plus simple de contourner cette protection est d'utiliser l'initialisation via un constructeur. Cependant, de cette façon, nous pouvons uniquement initialiser les champs des objets mais pas accéder à ces champs. Voyons un exemple :
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob.name); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } }
Nous avons pu initialiser le champ name
via le constructeur, mais nous ne pouvons toujours pas accéder à ce champ ni l'afficher avec System.out.println()
. Pour contourner cela, nous pouvons surcharger la méthode toString()
afin que, lorsque nous appelons System.out.println(bob);
, cela affiche les informations sur ses champs.
Voyons un exemple :
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob"); System.out.println(bob); } } class Person { private String name; private int age; private String gender; public Person(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }
Nous avons finalement réussi à afficher la valeur du champ name
de l'objet bob
. Nous y sommes parvenus en utilisant la méthode surchargée toString()
dans laquelle nous avons implémenté la logique d'affichage du name
.
La question se pose alors : pourquoi avons-nous besoin de ce modificateur d'accès si nous devons écrire autant de code supplémentaire ?
Parfois, dans différentes classes, il existe des variables portant le même nom, et dans de tels cas, il est nécessaire de masquer les variables de ces classes afin que les autres classes n'aient pas accès à des champs inutiles. Cela améliore considérablement la commodité de l'écriture du code en général lorsque l'on comprend à quelle classe appartient chaque champ.
Merci pour vos commentaires !