Soru Tarihi:
Java'da verilere ve metodlara erişim seviyesinin kontrolü, kapsülleme ve sınıfların iç yapısının korunmasını sağlamak için tanıtılmıştır. Bu, uygulama geliştirmede önemli bir OOP parçasıdır ve uygulamanın gerçekleştirilmesini gizlemeye ve nesnelerin durumunun yetkisiz değişimini önlemeye yardımcı olur.
Sorun:
Farklı erişim belirleyicileri — public, protected, (package-private), private — sınıf üyelerinin görünürlük alanını farklı şekilde kısıtlar, bu çoğu zaman açık değildir. Yanlış seçilmiş bir seviye hatalara, yetki aşımına ve kapsüllemenin ihlaline yol açabilir.
Çözüm:
Her alan veya yöntem için en az gerekli erişim belirleyicisini kullanmak. Java şunları destekler:
Kod örneği:
public class Dog { private String name; // yalnızca Dog içinde görünür String breed; // package-private protected int age; // paket içinde ve miras alanlarda görünür public void bark() { // herhangi bir koddan erişilebilir System.out.println("Woof!"); } }
Anahtar Özellikler:
İç içe (inner) bir sınıf, dış sınıfın tüm private alanlarına erişebilir mi?
Evet, iç sınıf, dış sınıfın tüm alanlarına ve yöntemlerine, hatta private olanlarına tam erişime sahiptir. Ve tersine, dış sınıf, eğer iç sınıfın bir örneğine sahipse, iç sınıfın private üyelerine erişebilir.
Bir sınıfın protected üyesi, miras almadan paket dışında erişilebilir mi?
Hayır. Paket dışında protected yalnızca miras alanlara ulaşılabilir. Sadece başka bir paketteki sınıfın nesnesi aracılığıyla erişilemez.
Sınıf public olarak belirtilmemişse, ancak başka bir paketten içe aktarıldıysa ne olacaktır?
Package-private seviyesinde bir sınıf, açıkça kendi paketi dışından içe aktarılamaz ve kullanılamaz. Başka bir paketten erişim denemesi, derleme hatası verecektir.
Negatif Durum
DTO için tüm sınıf alanları erişimi kolaylaştırmak için public olarak işaretlenmiştir.
Artılar:
Eksiler:
Pozitif Durum
Private alanlar ve kamuya açık erişim yöntemleri kullanılır.
Artılar:
Eksiler: