Soru Tarihi
Java'da erişim belirleyicileri, verilerin kapsüllenmesi ve sınıfın iç işleyişinin gizlenmesi ilkesinin uygulanması amacıyla uygulanmıştır. Java'nın ilk ortaya çıktığı andan itibaren private, sınıfın dışından yanlışlıkla veya yetkisiz erişimden verilerin korunmasının bir sembolü haline gelmiştir.
Problem
Alanlara ve yöntemlere erişimin doğru yönetilmemesi durumunda, nesnelerin iç durumu sınıf veya dış kod tarafından değiştirilebilir. Bu da kapsülleme ihlaline, hata ayıklama zorluğuna ve sık oluşan hatalara yol açar.
Çözüm
private, bir alanın, yöntemin veya iç sınıfın yalnızca tanımlandığı sınıfın içinde erişilebilir olmasını garanti eder. Genellikle özel alanlar ve yöntemlerle çalışmak için getter ve setter (erişim yöntemleri) kullanılır. Bu, kapsülleme ve nesnenin durumunu değiştirme kontrolünü destekler.
Örnek kod:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Anahtar özellikler:
İç sınıf dış sınıfın özel üyelerine erişebilir mi?
Evet, iç (inner) sınıf, dış sınıfının özel alanlarına ve yöntemlerine tam erişime sahiptir çünkü iç sınıf, dış sınıfının uygulama alanının bir parçasıdır.
Örnek kod:
public class Outer { private int data = 42; class Inner { int getData() { return data; // erişilebilir! } } }
Özel bir yapıcı oluşturmak mümkün mü ve neden gereklidir?
Evet, mümkündür. Özel yapıcılar, singleton desenlerinde veya nesne oluşturmayı sadece sınıf içinde sınırlamak için, örneğin fabrika yöntemi aracılığıyla kullanılır.
Özel static bir alan tanımlandığında ne olur?
private static alanlar yalnızca kendi sınıflarında erişilebilir, ancak yine de sınıfa aittir, örnekten değil. Bu, dışarıdan erişilemeyen yardımcı sayıcıları, sabitleri ve diğer statik verileri saklamak için kullanışlıdır.
Bir projede User sınıfının tüm alanları public olarak tanımlanmıştı. Bu, dış modüllerin doğrudan balance ve password gibi alanları değiştirmesine olanak tanıdı.
Artılar:
Eksiler:
Aynı projede sınıfın alanları private olarak tanımlandı ve onlarla doğrulanmış setterlar aracılığıyla çalışıldı. Balance ve şifrelerle ilgili hatalar hemen belirgin hale geldi.
Artılar:
Eksiler: