Java'da package-private, "varsayılan" erişim seviyesidir (herhangi bir erişim belirleyici belirtilmeden: public, protected, private). Böyle bir sınıf üyesi (metod, alan veya sınıfın kendisi) yalnızca aynı paket içerisindeki sınıflardan erişilebilir.
class MyClass { /* ... */ } void doSomething() { /* ... */ }
Örnek:
// Dosya: com/example/internal/Helper.java class Helper { static void help() { System.out.println("helped"); } }
Sınıf veya metod içsel bir implementasyon detayıysa, her zaman package-private kullanın.
Soru: Package-private bir sınıf, miras alma veya import yoluyla başka bir paket içinde görülebilir mi?
Cevap: Hayır, package-private üyelere miras alma veya diğer paketlerden import aracılığıyla erişilemez — yalnızca kendi paketleri içinde erişilebilirler.
Hikaye
Büyük bir projede farklı ekipler, yardımcı mantık için package-private sınıflar kullanmaya başladı. Kodun diğer paketlerden yeniden kullanılmaya çalışıldığında, erişim mümkün olmuyordu. Sonuç olarak sınıflar public yapmak zorunda kaldılar, bu da iç implementasyonu açığa çıkardı.
Hikaye
Çok modüllü bir projede package-private sınıflar, modüler testler yazılırken sorunlara neden oldu: başka bir paketteki testler package-private metodları göremedi ve testleri orijinal paketin içine taşımak ya da erişim seviyesini zayıflatmak zorunda kaldık.
Hikaye
Kodu yeni bir pakete taşırken beklenmedik derleme zamanı hatalarıyla karşılaştık - birçok metod ve sınıf beklenmedik bir şekilde "kayboldu", çünkü package-private olup paket değiştikten sonra erişilemez hale geldiler.