जब जावा में एक गैर आभासी विधि अधिभावी, @Override एनोटेशन के उपयोग की सिफारिश की है, लेकिन क्या अगर मैं एक सार विधि को लागू? क्या मुझे @ ओवरराइड का भी उपयोग करना चाहिए?जावा: क्या अमूर्त तरीकों को लागू करते समय मुझे @ ओवरराइड एनोटेशन जोड़ना चाहिए?
उत्तर
मैं इस मामले में @Override
का उपयोग करना पसंद करता हूं, ताकि अगर सुपरक्लस बदलता है (या तो पूरी तरह से विधि को हटा रहा है, या इसके हस्ताक्षर को बदल रहा है, तो उप-वर्गों में विधि ध्वजांकित हो जाती है)।
केवल वास्तविक अंतर यह है कि एनोटेशन के बिना, अगर सुपर क्लास/इंटरफ़ेस में विधि बदल गया है या हटा दिया जाता है, सवाल में कार्यान्वयन बस उस वर्ग के एक "सामान्य" विधि बन जाता है। इस प्रकार यदि आप अनुबंध को पूरा करने के लिए विधि को लागू कर रहे हैं तो आपको एनोटेशन जोड़ना चाहिए; और यदि संभवतः किसी भी कार्यान्वित इंटरफेस या विरासत वाले अमूर्त तरीकों के बावजूद विधि आपकी कक्षा में समझ में आती है तो आपको इसे जोड़ना नहीं चाहिए।
हां। प्रभावशाली जावा में जोशुआ ब्लोच द्वारा अभ्यास की सिफारिश की जाती है।
हां - फिर, यह संकलक को बताता है, "मैं वास्तव में यहां एक विधि को ओवरराइड करना चाहता हूं। अगर ओवरराइड करने के लिए एक समान विधि नहीं है, तो मैंने गलती की है और इसके बारे में बताना चाहते हैं ! "
व्यक्तिगत रूप से मुझे लगता है कि यह एक दयालु बात है कि यह भाषा के हिस्से के बजाय सिर्फ एक टिप्पणी है (जैसा कि यह सी # में है) लेकिन यह निश्चित रूप से हिंडसाइट का लाभ है।
+1 जो मेरी त्वचा को कुछ बार बचाता है। – guerda
के लिए –
वास्तव में, यहोशू बलोच, प्रभावी जावा में पेज 178 के अंतिम पैरा में (2 एड।) का कहना है कि यह ठोस वर्ग कि सार तरीकों को ओवरराइड Override
एनोटेशन का उपयोग करने के तरीके के लिए आवश्यक नहीं है, क्योंकि संकलक होगा वैसे भी एक त्रुटि दें। हालांकि, "ऐसा करने के लिए हानिकारक नहीं है"।
मैं एक रणनीति चुनने की सलाह देते हैं और लगातार इसके साथ चिपके हुए।
संकलक वैसे भी एक त्रुटि देगा? आपका मतलब है कि अगर एक ठोस वर्ग एक ऐसी विधि लागू करता है जो सुपरक्लास की अमूर्त विधि नहीं है, तो संकलक इसके बारे में शिकायत करेगा? यह आपका मतलब नहीं हो सकता है, लेकिन मैं यह नहीं समझ सकता कि आपका क्या मतलब है। – LarsH
@ लार्सएच का मतलब है कि संकलक एक त्रुटि देगा यदि कंक्रीट क्लास सुपरक्लास में एक अमूर्त विधि को लागू करने में विफल रहता है, जो मामला होगा यदि आपने सार तत्व को लागू करने के लिए आवश्यक सार तत्व का नाम गलत वर्तनी किया है। –
@espertus: स्पष्टीकरण के लिए धन्यवाद। तो अगर आपको एंड्रज ने कहा, तो आपको त्रुटि या चेतावनी नहीं मिलेगी, सुपरक्लस/इंटरफेस में विधि बदल दी गई है या हटा दी गई है। – LarsH
- 1. संकलन समय पर जावा एनोटेशन लागू करना
- 2. ग्रहण के साथ काम करते समय, क्या मुझे कार्यक्षेत्र को स्रोत नियंत्रण में जोड़ना चाहिए?
- 3. क्या मुझे गैर-फेंकने वाले स्वैप को लागू करते समय फेंक() का उपयोग करना चाहिए?
- 4. संरक्षित तरीकों को ओवरराइड करना
- 5. क्या मुझे स्रोत नियंत्रण में .vcxproj.filter फ़ाइलों को जोड़ना चाहिए?
- 6. @ ओवरराइड एनोटेशन के बिना सुपरक्लास/इंटरफेस विधियों को ओवरराइड करने के सभी तरीकों को कैसे ढूंढें?
- 7. सी # डिज़ाइन: अमूर्त तरीकों पर नया/ओवरराइड क्यों आवश्यक है लेकिन वर्चुअल तरीकों पर नहीं?
- 8. अमूर्त तरीकों के लिए मानक दृश्यता
- 9. आभासी और अमूर्त तरीकों
- 10. त्रुटि: कक्षा को अमूर्त घोषित किया जाना चाहिए या शेष विधियों को लागू करना चाहिए
- 11. अमूर्त विधियों के कार्यान्वयन पर ओवरराइड कीवर्ड का उपयोग
- 12. जावा जेनेरिक - एक अमूर्त विधि को ओवरराइड करना और सबक्लास
- 13. refactoring करते समय एफ # प्रकार एनोटेशन हटा दिया जाना चाहिए?
- 14. जावा प्रोजेक्ट में एनोटेशन जोड़ना/संशोधित करना
- 15. जावा क्लास में प्रोग्रामेटिक एनोटेशन जोड़ना
- 16. क्या मुझे सेवा() या doPost() को ओवरराइड करना चाहिए?
- 17. क्या मुझे एक ActiveRecord polymorphic एसोसिएशन को जोड़ना चाहिए?
- 18. क्यों ग्रहण "प्रतिनिधि तरीके उत्पन्न करें" में @ ओवरराइड एनोटेशन जोड़ना नहीं है?
- 19. ये जावा एनोटेशन क्या काम करते हैं?
- 20. क्या मुझे एएसपी.NET के लिए सी # में एक विधि को ओवरराइड करते समय बेस क्लास कार्यान्वयन को कॉल करना चाहिए?
- 21. वीबीएनईटी - आईडीआईएसओपेबल को लागू करते समय एक अंतिम विधि जोड़ा जाना चाहिए?
- 22. क्या मुझे जेएफआरएएम या इसकी सामग्री में घटक जोड़ना चाहिए?
- 23. क्या मुझे इंटरफ़ेस सदस्यों को स्पष्ट रूप से या निहित रूप से लागू करना चाहिए?
- 24. एक अमूर्त विधि एक अमूर्त विधि ओवरराइड करता है
- 25. विधियों को ओवरराइड करते समय एक्सेस निर्दिष्ट करें
- 26. क्या मुझे स्थैतिक विधि या अमूर्त सुपरक्लास
- 27. क्या मुझे ओपनआईडी प्रमाणीकरण लागू करना चाहिए? अमेरिकी/जापानी उपयोगकर्ता
- 28. पहली कंक्रीट कक्षा द्वारा अमूर्त तरीकों को लागू क्यों किया जाना चाहिए, और श्रृंखला के नीचे एक और क्यों नहीं?
- 29. रनटाइम पर सार तरीकों को लागू करना?
- 30. मुझे सेल.contentView में सबव्यूव्यू कैसे जोड़ना चाहिए?
इसके अलावा यह व्याख्या लाभ उठाने के लिए जावा 6 की जरूरत है। जावा 5 आपको इंटरफ़ेस कार्यान्वयन पर रखने की अनुमति नहीं देता है। "रेग्रेशन टेस्ट" – akarnokd