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. Maintenant, 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 ne souhaite pas qu'une variable d'une classe soit visible ou accessible depuis une autre classe, on peut utiliser le modificateur d'accès private :
Main.java
123456789101112131415package 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, il est uniquement possible d'initialiser les champs des objets mais pas d'accéder à ces champs. Voyons un exemple :
Main.java
123456789101112131415161718package 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 cette limitation, il est possible de surcharger la méthode toString() afin que, lors de l'appel de System.out.println(bob);, les informations concernant ses champs soient affichées.
Examinons un exemple :
Main.java
1234567891011121314151617181920212223package 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 avons accompli cela en utilisant la méthode toString() surchargée, dans laquelle nous avons implémenté la logique d'affichage du name.
La question se pose : 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 facilité d'écriture du code en général lorsque l'on comprend à quelle classe appartient chaque champ.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 2.63
Modificateur Private
Glissez pour afficher le menu
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. Maintenant, 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 ne souhaite pas qu'une variable d'une classe soit visible ou accessible depuis une autre classe, on peut utiliser le modificateur d'accès private :
Main.java
123456789101112131415package 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, il est uniquement possible d'initialiser les champs des objets mais pas d'accéder à ces champs. Voyons un exemple :
Main.java
123456789101112131415161718package 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 cette limitation, il est possible de surcharger la méthode toString() afin que, lors de l'appel de System.out.println(bob);, les informations concernant ses champs soient affichées.
Examinons un exemple :
Main.java
1234567891011121314151617181920212223package 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 avons accompli cela en utilisant la méthode toString() surchargée, dans laquelle nous avons implémenté la logique d'affichage du name.
La question se pose : 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 facilité d'écriture du code en général lorsque l'on comprend à quelle classe appartient chaque champ.
Merci pour vos commentaires !