Aller au contenu

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 uniquement
  • default → mon package
  • protected → mon package + mes enfants
  • public → 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 entre default et public
  • 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).