Bir sınıfı alt sınıfa koyarken yaptığım ilk şeylerden biri, bir sürü özel yöntemi korumalı olarak değiştirmek.
Hakkında bazı muhakeme private
vs protected
yöntemlerle :
private
yöntemler kodun yeniden kullanımını engeller. Bir alt sınıf, kodu özel yöntemde kullanamaz ve tekrar uygulamak zorunda kalabilir - ya da başlangıçta özel yönteme bağlı olan yöntemleri / yöntemleri yeniden uygulayabilirsiniz & c.
Öte yandan, herhangi bir yöntem değil private
anlamında sınıfa "dış dünya" tarafından sağlanan bir API olarak görülebilir, üçüncü taraf alt sınıfları "dış dünya" da, bir başkası onun cevabını önerildiği gibi dikkate alınmasını zaten.
Bu kötü bir şey mi? - Sanmıyorum.
Elbette, bir (sözde) genel API, orijinal programlayıcıyı kilitler ve bu arayüzlerin yeniden yapılandırılmasını engeller. Ancak diğer taraftan da görüldü, neden bir programcı kendi "uygulama ayrıntılarını" kendi genel API'si kadar temiz ve kararlı bir şekilde tasarlamamalı? private
Özel kodunu yapılandırma konusunda özensiz olması için kullanmalı mı? Kimse farketmeyeceği için belki daha sonra temizleyebileceğini mi düşünüyorsun? - Hayır.
Programcı, "özel" koduna da az düşünmeli, ilk etapta mümkün olduğu kadar tekrar kullanılmasını sağlayacak veya hatta teşvik edecek şekilde yapılandırmalıdır. Öyleyse, özel olmayan bölümler gelecekte bir korku kadar bir yük haline gelmeyebilir.
Gördüğüm pek çok (çerçeve) kod, tutarsız bir kullanım benimsiyor private
: protected
özel bir metoda devredilmekten başka bir şey yapmaktan başka bir şey yapmayan son olmayan yöntemler. protected
sözleşmesi ancak özel alanlara doğrudan erişim yoluyla gerçekleştirilebilecek nihai olmayan yöntemler.
Bu yöntemler, mantıksal olarak geçersiz kılınamaz / geliştirilemez, ancak teknik olarak bunu (derleyici) açıklığa kavuşturmak için hiçbir şey yoktur.
Uzatılabilirlik ve miras ister misiniz? Yöntemlerini yapma private
.
Sınıfınızın belirli davranışlarının değişmesini istemiyor musunuz? Yöntemlerini yap final
.
Gerçekten de yönteminiz belli, iyi tanımlanmış bir bağlamın dışında çağrılamaz mı? Yönteminizi yapın private
ve / veya gerekli iyi tanımlanmış içeriği başka bir protected
sarmalayıcı yöntemiyle yeniden kullanmak için nasıl kullanılabilir hale getirebileceğinizi düşünün .
Bu yüzden private
az miktarda kullanmayı savunuyorum . Ve karıştırmamak private
için final
. - Bir yöntemin uygulanması sınıfın genel sözleşmesi için hayati öneme sahipse ve bu nedenle değiştirilmemesi / geçersiz kılmaması gerekiyorsa, yapın final
!
Alanlar için, private
gerçekten fena değil. Alan (lar) makul bir şekilde uygun yöntemlerle "kullanılmış" olduğu sürece ( ya da değil !).getXX()
setXX()