Soyut bir sınıf yazıyorum ve alt sınıf tarafından tanımlanması gereken bir değişkenim var (bu durumda süper sınıfta kullanılan bir int). protected
değişkenini bir varsayılan değer ile tanımlayıp belirlememeye karar veremiyorum ve alt sınıfın değeri yapıcıda veya setter
yöntemiyle değiştirmesine izin veremiyorum. Ya da tüm alt sınıfların onu uygulamak ve kullanmak istedikleri değeri döndürmek için ana sınıftaki soyut bir yöntemi tanımlamak (daha sonra soyut yöntemi kullanarak süper-sınıftaki yönteme erişmek). Birinin diğerinin üzerinde tercih edilmesinin en önemli nedenlerinden biri var mı?Alt sınıf tarafından belirtilmesi gereken veriler için soyut bir yöntem mi yoksa örnek değişken mi kullanmalıyım?
Özet Yöntem:
public abstract int getValue();
public int getValue() {
return 5;
}
- Artıları:
Kuvvetler alt sınıfı bu değeri hakkında düşünmek ve onlar olmak istediğini seçin.
- Eksileri:
Hiçbir varsayılan değer, yani alt sınıfların çoğu sadece aynı değeri kullanmak istediğinizde bile hala yöntemi uygulamak zorunda. (Yöntem olmayan soyut yapılmış ve varsayılan değeri döndürür, ancak o zaman değeri hakkında düşünmek için alt sınıfları zorlamak avantajını kaybetmek olabilir)
Korumalı Değişken:
protected int value;
public SubClassImpl() {
value = 5;
}
- Artıları:
onlar umursamazsak varsayılan bir değer ve alt sınıflar sadece göz ardı edebilirsiniz tanımlayabilir.
- Eksileri: alt sınıfın
Yazarlar değişkenin varlığından haberdar değildir, bu yüzden varsayılan davranışı tarafından sürpriz olabilir.
Değer değişmez mi? Değilse, değeri değiştirmek kimin sorumluluğundadır? –
Değerin değişmez olması için herhangi bir gereksinim yoktur, ancak nesnenin oluşturulmasından sonra değiştirilmesini beklemezdim. – DaveJohnston
Bence diğer perspektiften bakmak daha iyi. Değiştirilebilir hale getirme zorunluluğu yoksa, bunu değişmez hale getirerek başlayın. Bir gereksinim belirirse bunu değiştirilebilir duruma getirin. "Korunan yapıcı parametresi" seçeneği için –