जब मैं एक वर्ग को उपवर्ग में रखता हूं तो पहली चीजों में से एक संरक्षित करने के लिए निजी तरीकों का एक गुच्छा बदलना है
private
बनाम protected
तरीकों के बारे में कुछ तर्क :
private
तरीके कोड के पुन: उपयोग को रोकते हैं। एक उपवर्ग निजी पद्धति में कोड का उपयोग नहीं कर सकता है और इसे फिर से लागू करना पड़ सकता है - या विधि (ओं) को फिर से लागू कर सकता है जो मूल रूप से निजी विधि और सी पर निर्भर करते हैं।
दूसरी ओर, किसी भी विधि को "बाहरी दुनिया" के लिए कक्षा द्वारा प्रदान की गई एपीआई के रूप में नहीं private
देखा जा सकता है, इस अर्थ में कि तीसरे पक्ष के उपवर्गों को "बाहरी दुनिया" भी माना जाता है, जैसा कि उनके जवाब में किसी और ने सुझाया है। पहले से।
क्या यह गलत बात है? - मुझे ऐसा नहीं लगता।
बेशक, एक (छद्म-) सार्वजनिक एपीआई मूल प्रोग्रामर को बंद कर देता है और उन इंटरफेस के रिफैक्टिंग में बाधा उत्पन्न करता है। लेकिन दूसरी तरह से देखा जाए, तो एक प्रोग्रामर को अपने "कार्यान्वयन विवरण" को इस तरह से डिज़ाइन नहीं करना चाहिए जो उसके सार्वजनिक एपीआई के समान साफ और स्थिर हो? क्या उसे इसका उपयोग करना चाहिए private
ताकि वह अपने "निजी" कोड को संरचित करने के बारे में सुस्त हो सके? शायद यह सोचकर कि वह इसे बाद में साफ कर सकता है, क्योंकि कोई भी नोटिस नहीं करेगा? - नहीं।
प्रोग्रामर को अपने "निजी" कोड में भी थोड़ा विचार करना चाहिए, इसे इस तरह से तैयार करना चाहिए कि पहली जगह में जितना संभव हो उतना पुन: उपयोग की अनुमति देता है। फिर गैर-निजी हिस्से भविष्य में उतने बोझ के रूप में नहीं बन सकते हैं जितना कि कुछ भय।
बहुत सारे (फ्रेमवर्क) कोड मैं देख रहा हूं कि एक असंगत उपयोग को अपनाया जाता है private
: protected
गैर-अंतिम तरीके जो निजी तौर पर एक निजी पद्धति को सौंपने से ज्यादा कुछ नहीं करते हैं। protected
, गैर-अंतिम विधियां, जिनका अनुबंध केवल निजी क्षेत्रों तक सीधी पहुंच के माध्यम से भी पूरा किया जा सकता है।
इन विधियों को तार्किक रूप से अधिग्रहित / बढ़ाया नहीं जा सकता है, हालांकि तकनीकी रूप से ऐसा करने के लिए कुछ भी नहीं है (संकलक) स्पष्ट।
विस्तार और विरासत चाहते हैं? अपने तरीके मत बनाओ private
।
अपनी कक्षा के कुछ व्यवहार को बदलना नहीं चाहते हैं? अपने तरीके बनाओ final
।
वास्तव में आपकी पद्धति एक निश्चित, अच्छी तरह से परिभाषित संदर्भ के बाहर नहीं हो सकती है? अपनी विधि बनाएं private
और / या इस बारे में सोचें कि आप किसी अन्य protected
आवरण विधि के माध्यम से पुन: उपयोग के लिए आवश्यक अच्छी तरह से परिभाषित संदर्भ कैसे उपलब्ध कर सकते हैं ।
इसलिए मैं private
संयम बरतने की वकालत करता हूं । और private
साथ भ्रमित करने के लिए नहीं final
। - यदि किसी विधि का कार्यान्वयन कक्षा के सामान्य अनुबंध के लिए महत्वपूर्ण है और इस प्रकार इसे प्रतिस्थापित / ओवरराइड नहीं किया जाना चाहिए, तो करें final
!
खेतों के लिए, private
वास्तव में बुरा नहीं है। जब तक क्षेत्र (ओं) को उचित तरीकों के माध्यम से यथोचित "उपयोग" किया जा सकता है (वह है या नहीं !)।getXX()
setXX()