In Java is package-private het standaard toegangs niveau (zonder dat publieke, beschermde of privé-modifiers worden aangegeven). Een dergelijk lid van een klasse (methode, veld of de klasse zelf) is alleen toegankelijk vanuit klassen in hetzelfde pakket.
class MyClass { /* ... */ } void doSomething() { /* ... */ }
Voorbeeld:
// Bestand: com/example/internal/Helper.java class Helper { static void help() { System.out.println("geholpen"); } }
Gebruik altijd package-private als de klasse of methode een interne implementatiedetail is.
Vraag: Kan een package-private klasse zichtbaar zijn binnen een ander pakket via overerving of import?
Antwoord: Nee, package-private leden zijn niet toegankelijk via overerving of import uit andere pakketten — ze zijn alleen toegankelijk binnen hun eigen pakket.
Verhaal
In een groot project begonnen verschillende teams package-private klassen te gebruiken voor hulplogica. Toen de code opnieuw werd gebruikt uit andere pakketten, lukte dit niet — toegang was onmogelijk. Als gevolg moesten de klassen publiek worden gemaakt, wat de interne implementatie blootstelde.
Verhaal
In een multi-modulproject veroorzaakten package-private klassen problemen bij het schrijven van module tests: tests in een ander pakket zagen de package-private methoden niet, en het was nodig om de testen naar het oorspronkelijke pakket te verplaatsen of het toegangs niveau te verzwakken.
Verhaal
Bij het migreren van code naar een nieuw pakket waren er onverwachte compile-tijdfouten — veel methoden en klassen "verdwijnen" onverwachts omdat ze package-private waren en niet meer toegankelijk waren na het wijzigen van het pakket.