निजी कन्स्ट्रक्टर बनाने से, हम तुरंत बाहर से कहीं भी कक्षा से बच सकते हैं। और कक्षा फाइनल बनाकर, कोई अन्य वर्ग इसे बढ़ा सकता है। कक्षा के लिए private
कन्स्ट्रक्टर और final
कक्षा के लिए क्यों आवश्यक है?क्या यह अनिवार्य उपयोगिता वर्ग अंतिम और निजी कन्स्ट्रक्टर होना चाहिए?
उत्तर
बनाने के लिए यह दृश्य या जावा के कार्यात्मक बिंदु से एक जनादेश नहीं है जरूरत नहीं थी जटिलता या रनटाइम। हालांकि, व्यापक कोड द्वारा स्वीकार किए गए कोडिंग मानक। यहां तक कि बहुत से स्थिर कोड समीक्षा उपकरण जैसे checkstyle और कई अन्य जांच करते हैं कि इस तरह के वर्गों का यह ध्यान है।
इस सम्मेलन का पालन क्यों किया जाता है, पहले से ही अन्य उत्तरों में समझाया गया है और यहां तक कि ओपी भी शामिल है।
मुझे इसे थोड़ा और समझाना पसंद है, ज्यादातर उपयोगिता वर्गों में ऑब्जेक्ट उदाहरण से स्वतंत्र तरीके/कार्य होते हैं। वे कुल कार्यों के प्रकार हैं। जैसा कि वे केवल वापसी मूल्यों के मानकों पर निर्भर करते हैं और उपयोगिता वर्ग के वर्ग चर से जुड़े नहीं हैं। इसलिए, ज्यादातर इन कार्यों/विधियों को स्थिर रखा जाता है। नतीजतन, उपयोगिता कक्षाएं सभी स्थिर तरीकों के साथ आदर्श कक्षाएं हैं। तो, इन विधियों को बुलाए जाने वाले किसी भी प्रोग्रामर को इस कक्षा को तुरंत चालू करने की आवश्यकता नहीं है। हालांकि, कुछ रोबो-कोडर (कम अनुभव या रुचि के साथ हो सकते हैं) ऑब्जेक्ट बनाने के लिए प्रवृत्त होंगे क्योंकि उनका मानना है कि उन्हें अपनी विधि को कॉल करने से पहले उन्हें आवश्यकता है।
रखें शिक्षित लोगों को यहका दृष्टांत नहीं है -: वस्तु बनाने से बचने के लिए, हम 3 विकल्प हैं। (कोई साधु व्यक्ति इसे नहीं कर सकता है।)- मार्क क्लास सार के रूप में: - फिर से रोबो-कोडर ऑब्जेक्ट नहीं बनाएंगे। हालांकि, समीक्षा और व्यापक जावा समुदाय का तर्क है कि अमूर्त चिह्नों का अर्थ है कि आप चाहते हैं कि कोई इसे विस्तारित करे। तो, यह भी अच्छा विकल्प नहीं है।
- निजी निर्माता: - संरक्षित फिर से बच्चे वर्ग को ऑब्जेक्ट बनाने की अनुमति देगा।
अब, फिर से अगर किसी को इन उपयोगिता वर्ग के लिए कुछ कार्यक्षमता के लिए नई विधि जोड़ना चाहता है, वह इसे विस्तार करने के लिए, वह नई विधि जोड़ सकते हैं के रूप में प्रत्येक विधि indepenent है और अन्य कार्यक्षमताओं को तोड़ने का कोई मौका नहीं की जरूरत नहीं है । तो, इसे ओवरराइड करने की कोई ज़रूरत नहीं है। और आप भी instiantiate नहीं जा रहे हैं, तो इसे subclass करने की जरूरत है। इसे अंतिम रूप से चिह्नित करने के लिए बेहतर है।
संक्षेप में, उपयोगिता वर्गों की वस्तु बनाना समझ में नहीं आता है। इसलिए रचनाकारों को या तो निजी होना चाहिए। और आप कभी इसे ओवरराइड नहीं करना चाहते हैं, इसलिए इसे अंतिम रूप से चिह्नित करें।
स्पष्टीकरण के लिए धन्यवाद –
यह आवश्यक नहीं है, लेकिन यह सुविधाजनक है। एक यूटिलिटी क्लास केवल संबंधित कार्यों का नामस्थान धारक है और इसका मतलब तत्काल या उपclassed नहीं है। तो तत्कालता और विस्तार को रोकने से कक्षा के उपयोगकर्ता को एक सही संदेश भेजता है।
100k पर बधाई :) –
धन्यवाद, kocko :) –
तो इसका मतलब केवल इसकी सुविधा के लिए कुछ और नहीं है? –
डिफ़ॉल्ट रूप से वर्ग इस तरह सामान्य रूप से कुल कार्यों जो अलग करना प्रयोग किया जाता है इस, उस मामले में हम एक नई वस्तु
क्या आप अपने समाधान को आपके द्वारा प्रदान किए गए समाधान के बारे में थोड़ा और विवरण जोड़कर विस्तारित कर सकते हैं? – abarisone
जावा भाषा और जावा रनटाइम के बीच एक महत्वपूर्ण अंतर है।
जब जावा वर्ग बाईटकोड को संकलित किया गया है, वहाँ पहुँच प्रतिबंध, public
, package
, protected
, private
बराबर हैं की धारणा नहीं है। private
कन्स्ट्रक्टर का आह्वान करने के लिए प्रतिबिंब या बाइटकोड मैनिपुलेशन के माध्यम से यह हमेशा संभव है, इसलिए जेवीएम उस क्षमता पर भरोसा नहीं कर सकता है।
final
दूसरी तरफ, बाइटकोड के माध्यम से जारी रहता है, और यह गारंटी प्रदान करता है कि इसे अधिक कुशल बाइटकोड उत्पन्न करने के लिए जावैक द्वारा और जेवीएम द्वारा अधिक कुशल मशीन निर्देश उत्पन्न करने के लिए उपयोग किया जा सकता है।
यह सक्षम अधिकांश अनुकूलन अब प्रासंगिक नहीं हैं, क्योंकि जेवीएम अब उन सभी वर्गों के लिए समान अनुकूलन लागू करता है जो रनटाइम पर मोनोमोर्फिक हैं- और ये हमेशा सबसे महत्वपूर्ण थे।
स्पष्टीकरण के लिए धन्यवाद –
इनमें से अधिकतर कथन गलत हैं या उपयोगिता वर्गों पर लागू नहीं होते हैं। 1. पहुंच प्रतिबंध प्रतिबंधित होने पर 'invokevirtual' विफल हो जाएगा। 2. एक प्रतिबिंबित कॉल का बाइटकोड एक गैर-परावर्तक कॉल जैसा नहीं है। 3. 'निजी 'का बाइटकोड पर प्रभाव पड़ता है, _as का विरोध करने के लिए' अंतिम '(' invokespecial' का उपयोग किया जा सकता है)। सार्वजनिक अंतिम विधियों को 'invokevirtual' का उपयोग करके बाहर से बुलाया जाता है। 4. कक्षा पर 'अंतिम' स्थिर विधि कॉल पर कोई प्रभाव नहीं पड़ता है। –
- 1. निजी कन्स्ट्रक्टर और अंतिम
- 2. निजी कन्स्ट्रक्टर वाले एक वर्ग और निजी कन्स्ट्रक्टर वाले सीलबंद वर्ग के बीच क्या अंतर है?
- 3. अपरिवर्तनीय कक्षा अंतिम होना चाहिए?
- 4. क्या लॉगर निजी स्थिर होना चाहिए या
- 5. हमेशा अंतिम और स्थैतिक लॉगर होना चाहिए?
- 6. अमूर्त वर्ग बनाम निजी कन्स्ट्रक्टर
- 7. क्या यह एक निजी वर्ग संभव है?
- 8. हैडोप में क्या मैपर और रेड्यूसर स्थिर वर्ग होना चाहिए?
- 9. ओओ क्या होना चाहिए और क्या नहीं होना चाहिए?
- 10. जावा: निजी आंतरिक वर्ग संश्लेषित कन्स्ट्रक्टर
- 11. अनुबंध वर्ग एक अमूर्त वर्ग होना चाहिए
- 12. जावा-फाइनल क्लास बनाम निजी कन्स्ट्रक्टर: java.util.Arrays और java.lang.Math
- 13. क्या यह चार हस्ताक्षरित होना चाहिए?
- 14. डमी() फ़ंक्शन - यह क्या होना चाहिए?
- 15. क्या यह नामस्थान में होना चाहिए?
- 16. उपयोगिता वर्ग
- 17. उपयोगिता वर्ग - सही दृष्टिकोण क्या है?
- 18. क्या यह "व्यवस्था-कार्य-अधिनियम-दावा" होना चाहिए?
- 19. कन्स्ट्रक्टर को निजी या सार्वजनिक
- 20. निजी कन्स्ट्रक्टर और सार्वजनिक पैरामीटर कन्स्ट्रक्टर
- 21. उपयोगकर्ता उपयोगिता/अनुप्रयोगों को crates.io पर पंजीकृत होना चाहिए?
- 22. क्या जीएसन के लिए डिफॉल्ट नो-Args कन्स्ट्रक्टर अनिवार्य है?
- 23. निजी [यह] बनाम निजी
- 24. टुकड़ा आंतरिक वर्ग स्थिर होना चाहिए
- 25. क्या रणनीति पैटर्न स्टेटलेस होना चाहिए?
- 26. सी ++ - कन्स्ट्रक्टर निजी है तो यह क्या कर रहा है?
- 27. एक सूची <T> निजी होना चाहिए?
- 28. क्या एक स्ट्रिंग स्थिरांक वर्ग स्थिर होना चाहिए?
- 29. क्या प्रत्येक वर्ग में आभासी विनाशक होना चाहिए?
- 30. क्या प्रत्येक वर्ग का अपना नामस्थान होना चाहिए?
आपको ऐसा क्यों लगता है कि यह अनिवार्य है? क्या आपके पास एक प्रतिष्ठित स्रोत है जो कहता है कि यह आवश्यक है? – csmckelvey
इस बारे में सोचें कि आप एक कक्षा के साथ क्या कर सकते हैं जो 'अंतिम' है और आप उस वर्ग के साथ क्या नहीं कर सकते जिसमें 'निजी' कन्स्ट्रक्टर है। –
@ सुबोधजो जोशी: अब, अपने शब्दों में, समझाएं कि आप कक्षा में अंतिम बदलाव करने के बारे में क्या सोचते हैं। – Stultuske