2009-06-17 12 views
37

जब जावा में एक गैर आभासी विधि अधिभावी, @Override एनोटेशन के उपयोग की सिफारिश की है, लेकिन क्या अगर मैं एक सार विधि को लागू? क्या मुझे @ ओवरराइड का भी उपयोग करना चाहिए?जावा: क्या अमूर्त तरीकों को लागू करते समय मुझे @ ओवरराइड एनोटेशन जोड़ना चाहिए?

उत्तर

53

मैं इस मामले में @Override का उपयोग करना पसंद करता हूं, ताकि अगर सुपरक्लस बदलता है (या तो पूरी तरह से विधि को हटा रहा है, या इसके हस्ताक्षर को बदल रहा है, तो उप-वर्गों में विधि ध्वजांकित हो जाती है)।

केवल वास्तविक अंतर यह है कि एनोटेशन के बिना, अगर सुपर क्लास/इंटरफ़ेस में विधि बदल गया है या हटा दिया जाता है, सवाल में कार्यान्वयन बस उस वर्ग के एक "सामान्य" विधि बन जाता है। इस प्रकार यदि आप अनुबंध को पूरा करने के लिए विधि को लागू कर रहे हैं तो आपको एनोटेशन जोड़ना चाहिए; और यदि संभवतः किसी भी कार्यान्वित इंटरफेस या विरासत वाले अमूर्त तरीकों के बावजूद विधि आपकी कक्षा में समझ में आती है तो आपको इसे जोड़ना नहीं चाहिए।

+4

इसके अलावा यह व्याख्या लाभ उठाने के लिए जावा 6 की जरूरत है। जावा 5 आपको इंटरफ़ेस कार्यान्वयन पर रखने की अनुमति नहीं देता है। "रेग्रेशन टेस्ट" – akarnokd

13

हां। प्रभावशाली जावा में जोशुआ ब्लोच द्वारा अभ्यास की सिफारिश की जाती है।

19

हां - फिर, यह संकलक को बताता है, "मैं वास्तव में यहां एक विधि को ओवरराइड करना चाहता हूं। अगर ओवरराइड करने के लिए एक समान विधि नहीं है, तो मैंने गलती की है और इसके बारे में बताना चाहते हैं ! "

व्यक्तिगत रूप से मुझे लगता है कि यह एक दयालु बात है कि यह भाषा के हिस्से के बजाय सिर्फ एक टिप्पणी है (जैसा कि यह सी # में है) लेकिन यह निश्चित रूप से हिंडसाइट का लाभ है।

+0

+1 जो मेरी त्वचा को कुछ बार बचाता है। – guerda

+1

के लिए –

6

वास्तव में, यहोशू बलोच, प्रभावी जावा में पेज 178 के अंतिम पैरा में (2 एड।) का कहना है कि यह ठोस वर्ग कि सार तरीकों को ओवरराइड Override एनोटेशन का उपयोग करने के तरीके के लिए आवश्यक नहीं है, क्योंकि संकलक होगा वैसे भी एक त्रुटि दें। हालांकि, "ऐसा करने के लिए हानिकारक नहीं है"।

मैं एक रणनीति चुनने की सलाह देते हैं और लगातार इसके साथ चिपके हुए।

+0

संकलक वैसे भी एक त्रुटि देगा? आपका मतलब है कि अगर एक ठोस वर्ग एक ऐसी विधि लागू करता है जो सुपरक्लास की अमूर्त विधि नहीं है, तो संकलक इसके बारे में शिकायत करेगा? यह आपका मतलब नहीं हो सकता है, लेकिन मैं यह नहीं समझ सकता कि आपका क्या मतलब है। – LarsH

+1

@ लार्सएच का मतलब है कि संकलक एक त्रुटि देगा यदि कंक्रीट क्लास सुपरक्लास में एक अमूर्त विधि को लागू करने में विफल रहता है, जो मामला होगा यदि आपने सार तत्व को लागू करने के लिए आवश्यक सार तत्व का नाम गलत वर्तनी किया है। –

+1

@espertus: स्पष्टीकरण के लिए धन्यवाद। तो अगर आपको एंड्रज ने कहा, तो आपको त्रुटि या चेतावनी नहीं मिलेगी, सुपरक्लस/इंटरफेस में विधि बदल दी गई है या हटा दी गई है। – LarsH

संबंधित मुद्दे

 संबंधित मुद्दे