Aperçu des niveaux d'accès
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 10 sur 87.
Les modificateurs d'accès contrôlent d'où les champs et les méthodes peuvent être accédés. Java possède quatre niveaux de contrôle d'accès.
| Modificateur | Même classe | Même package | Sous-classe | Partout |
|---|---|---|---|---|
private | Oui | Non | Non | Non |
| default (aucun mot-clé) | Oui | Oui | Non | Non |
protected | Oui | Oui | Oui | Non |
public | Oui | Oui | Oui | Oui |
public class BankAccount {
private double balance; // Uniquement cette classe
String accountType; // Par défaut : même package uniquement
protected String owner; // Même package + sous-classes
public String bankName; // Accessible partout
}private est le plus restrictif - utilisez-le pour les données internes qui ne devraient jamais être accédées directement. public est le plus ouvert - utilisez-le pour les méthodes que d'autres classes doivent appeler.
Lorsque vous ne spécifiez aucun modificateur, Java utilise l'accès default (également appelé package-private). Cela permet l'accès uniquement au sein du même package.
class Helper { // Classe d'accès par défaut
void assist() { } // Méthode d'accès par défaut
}Choisissez le niveau d'accès le plus restrictif qui permet toujours à votre code de fonctionner. Cela protège vos données et rend votre code plus facile à maintenir.
Défi
FacileConstruisons un système d'enregistrement Student qui démontre comment les modificateurs d'accès contrôlent la visibilité à travers différents fichiers.
Vous allez créer deux fichiers pour organiser votre code :
Student.java: Définissez une classe Student avec des champs utilisant différents niveaux d'accès :- Champ
private:studentId(String) - uniquement accessible au sein de la classe Student - Champ par défaut (aucun modificateur) :
grade(int) - accessible au sein du même package - Champ
protected:name(String) - accessible dans le même package et les sous-classes - Champ
public:school(String) - accessible partout
publicnomméegetInfo()qui retourne une chaîne de caractères au format :"[studentId] name - Grade grade at school"- Champ
Main.java: Créez un objet Student et démontrez quels champs peuvent être accédés directement depuis l'extérieur de la classe. Affichez le champschooldirectement, puis affichez le résultat degetInfo()pour montrer toutes les informations de l'étudiant.
Vous recevrez quatre entrées : studentId, name, grade, et school (dans cet ordre).
Votre sortie doit comporter deux lignes : le nom de l'école accédé directement, suivi des informations complètes de l'étudiant provenant de la méthode getInfo().
Aide-mémoire
Les modificateurs d'accès contrôlent d'où les champs et les méthodes peuvent être consultés. Java dispose de quatre niveaux de contrôle d'accès :
| Modificateur | Même classe | Même package | Sous-classe | Partout |
|---|---|---|---|---|
private | Oui | Non | Non | Non |
| par défaut (aucun mot-clé) | Oui | Oui | Non | Non |
protected | Oui | Oui | Oui | Non |
public | Oui | Oui | Oui | Oui |
public class BankAccount {
private double balance; // Uniquement cette classe
String accountType; // Par défaut : même package uniquement
protected String owner; // Même package + sous-classes
public String bankName; // Accessible partout
}private est le plus restrictif - utilisez-le pour les données internes qui ne devraient jamais être consultées directement. public est le plus ouvert - utilisez-le pour les méthodes que d'autres classes doivent appeler.
Lorsque vous ne spécifiez aucun modificateur, Java utilise l'accès par défaut (également appelé package-private), qui n'autorise l'accès qu'au sein du même package :
class Helper { // Classe avec accès par défaut
void assist() { } // Méthode avec accès par défaut
}Choisissez le niveau d'accès le plus restrictif qui permet tout de même à votre code de fonctionner. Cela protège vos données et rend votre code plus facile à maintenir.
Essayez vous-même
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Lire les entrées
String studentId = scanner.nextLine();
String name = scanner.nextLine();
int grade = Integer.parseInt(scanner.nextLine());
String school = scanner.nextLine();
// TODO: Créer un objet Student avec les valeurs d'entrée
// TODO: Imprimer le champ school directement (accessible car il est public)
// TODO: Imprimer le résultat de getInfo() pour afficher toutes les informations de l'étudiant
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron Itérateur