Java — protected (Comprendre l’accès)
Le mot-clé protected en Java est un niveau d’accès intermédiaire, souvent mal compris mais très important pour la conception orientée objet.
1. Idée simple
protected signifie :
accessible :
- dans la même classe
- dans le même package
- dans les sous-classes (même dans un autre package)
2. Comparaison rapide des accès
| Modificateur | Même classe | Même package | Sous-classe (autre package) | Autre classe |
|---|---|---|---|---|
| private | ✔️ | ❌ | ❌ | ❌ |
| default | ✔️ | ✔️ | ❌ | ❌ |
| protected | ✔️ | ✔️ | ✔️ | ❌ |
| public | ✔️ | ✔️ | ✔️ | ✔️ |
3. Exemple simple
package a;
public class Parent {
protected int value = 10;
}
Même package
package a;
public class Test {
public static void main(String[] args) {
Parent p = new Parent();
System.out.println(p.value); // ✔️ OK
}
}
Sous-classe dans un autre package
package b;
import a.Parent;
public class Child extends Parent {
void test() {
System.out.println(value); // ✔️ OK
}
}
Cas interdit
package b;
import a.Parent;
public class Test {
public static void main(String[] args) {
Parent p = new Parent();
System.out.println(p.value); // ❌ erreur
}
}
Ici :
- pas dans le même package
- pas une sous-classe
Règle importante
Dans un autre package :
- ✔️ accessible via héritage
- ❌ pas accessible via une instance
4. Intuition simple
private→ moi uniquementdefault→ mon packageprotected→ mon package + mes enfantspublic→ tout le monde
Pièges fréquents
- croire que
protected= public - oublier la règle du package
- penser que toutes les classes peuvent y accéder
5. Questions classiques
Q1
protected est accessible où ?
package + sous-classes
Q2
accessible depuis autre package sans héritage ? non
Q3
accessible via instance dans autre package ? non
6. À retenir
protected= compromis entredefaultetpublic- utile pour l’héritage
- limite l’accès externe
- dépend du package
🧾 En résumé
- accessible dans le package
- accessible aux sous-classes
- inaccessible aux autres classes externes
- particulièrement utile en design orienté objet
protected est souvent utilisé pour exposer des éléments uniquement aux classes liées (héritage).