ProgrammationDéveloppeur Backend

Quel est le niveau d'accès package-private en Java, comment fonctionne-t-il et dans quels cas doit-on l'utiliser ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

En Java, package-private est le niveau d'accès "par défaut" (sans spécifier de modificateurs de visibilité : public, protected, private). Un membre de classe (méthode, champ ou classe elle-même) est accessible uniquement depuis les classes du même package.

  • Exemple :
    class MyClass { /* ... */ } void doSomething() { /* ... */ }
  • Non accessible en dehors du package, n'est pas hérité comme protected.
  • Utilisé pour la logique interne du package, afin de protéger l'implémentation de l'accès externe tout en permettant l'accès au code interne du package.

Exemple :

// Fichier : com/example/internal/Helper.java class Helper { static void help() { System.out.println("helped"); } }

Utilisez toujours package-private si la classe ou la méthode est un détail interne de l'implémentation.

Question piège

Question : Un classe package-private peut-elle être vue dans un autre package via héritage ou import ?

Réponse : Non, on ne peut pas accéder aux membres package-private ni par héritage ni par import depuis d'autres packages — ils ne sont accessibles qu'à l'intérieur de leur propre package.

Exemples d'erreurs réelles dues à l'ignorance des subtilités du sujet


Histoire

Dans un grand projet, différentes équipes ont commencé à utiliser des classes package-private pour une logique utilitaire. Lorsque le code a été essayé de réutiliser d'autres packages, cela ne fonctionnait pas — l'accès était impossible. En conséquence, il a fallu rendre les classes publiques, ce qui a ouvert l'implémentation interne.


Histoire

Dans un projet multi-modules, les classes package-private ont causé des problèmes lors de l'écriture de tests unitaires : les tests dans un autre package n'ont pas pu voir les méthodes package-private, et il a fallu déplacer les tests à l'intérieur du package source ou amenuiser le niveau d'accès.


Histoire

Lors de la migration de code vers un nouveau package, il y avait des erreurs de compilation inattendues — de nombreuses méthodes et classes ont disparu car elles étaient package-private et sont devenues inaccessibles après le changement de package.