Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Modificateur Private | Classes Avancées
Java Avancé
course content

Contenu du cours

Java Avancé

Java Avancé

1. Deep Java Structure
2. Méthodes
3. String Avancé
4. Classes
5. Classes Avancées

book
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

Main.java

copy
123456789101112131415
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

Main.java

copy
123456789101112131415161718
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

Main.java

copy
1234567891011121314151617181920212223
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.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 3

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

course content

Contenu du cours

Java Avancé

Java Avancé

1. Deep Java Structure
2. Méthodes
3. String Avancé
4. Classes
5. Classes Avancées

book
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

Main.java

copy
123456789101112131415
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

Main.java

copy
123456789101112131415161718
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

Main.java

copy
1234567891011121314151617181920212223
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.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 3
some-alt