Java'da alanlara, yöntemlere ve sınıflara erişimi yönetmek için erişim belirteçleri kullanılır: private, default (paket-özel), protected, public.
Konuya Giriş:
Java'nın erken sürümleri sıkı nesne kapsüllemeyi kullanıyordu. Esneklik için tam kapama ve genişletilebilirliğe (miras ve paket içindeki erişim) destek olmak amacıyla farklı erişim seviyeleri getirildi.
Problem:
Yanlış erişim belirteci seçimi, kapsüllemeyi ihlal edebilir, miras alma sorunlarına, test etme imkânsızlığına veya verilerin hatayla herkese açık hale gelmesiyle güvenlik hatalarına yol açabilir.
Çözüm:
Mimarinize en kapalı erişim belirtecini kullanın. Alanlar genellikle private olarak tanımlanır ve bunlara getter/setter aracılığıyla erişim sağlanır. Yöntemler, yalnızca API'nin bir parçası olduklarında public yapılır, genişletme için ise protected olurlar.
Kod örneği:
public class Person { private String name; // kapalı alan protected int age; // pakette ve miras alınanlarda erişilebilir String email; // paket-özel public String getName() { return name; } }
Ana özellikler:
private — sadece sınıf içinde erişilebilirprotected — diğer paketlerdeki miras alanlara da erişim sağlarpublic — herkes tarafından erişilebilirYerel değişkenlere erişim belirteci uygulanabilir mi?
Hayır. Erişim belirteçleri yalnızca sınıflara, yöntemlere ve alanlara/iç içe sınıflara uygulanır, yerel değişkenlere değil.
Bir yöntemin içinde, public erişim belirteci ile sınıf oluşturulabilir mi?
Hayır. Yerel bir sınıf erişim belirtecine sahip olarak tanımlanamaz, her zaman yöntemin içindeki alan kapsamına sahiptir.
Protected üye, başka bir paketteki alt sınıfa erişilebilir mi?
Evet, protected üyeler, başka paketlerde bulunsalar bile miras alanlara erişebilir, ancak başka bir paketteki normal sınıflara değil.
Sınıfın tüm alanları yanlışlıkla public olarak tanımlanmış — diğer sınıflardan doğrudan erişiliyor, değişiklik yerlerini izlemek zorlaşıyor.
Artılar:
Eksiler:
Tüm alanlar private, ve halka açık yöntemler erişimi kontrol ediyor ve sadece gerekli kısımlar miras alımlarda genişletme için protected yapılıyor.
Artılar:
Eksiler: