ओवरराइडिंग बनाम ओवरलोडिंग
विधि ओवरराइडिंग और विधि ओवरलोडिंग कुछ प्रोग्रामिंग भाषाओं में दो अवधारणाएं/तकनीक/विशेषताएं पाई जाती हैं। दोनों अवधारणाएं प्रोग्रामर को एक ही नाम के तरीकों के लिए अलग-अलग कार्यान्वयन प्रदान करने की अनुमति देती हैं। मेथड ओवरराइडिंग प्रोग्रामर को उप-वर्ग के भीतर एक वैकल्पिक कार्यान्वयन प्रदान करने की अनुमति देता है जो पहले से ही उसके सुपर क्लास के अंदर परिभाषित है। मेथड ओवरलोडिंग प्रोग्रामर को एक ही नाम (एक ही क्लास के भीतर) के साथ कई मेथड्स के लिए अलग-अलग इम्प्लीमेंटेशन प्रदान करने की अनुमति देता है।
क्या ओवरराइड कर रहा है?
जैसा कि ऊपर बताया गया है, एक क्लास ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग लैंग्वेज में सुपर क्लास या पैरेंट क्लास का विस्तार कर सकती है।एक चाइल्ड क्लास के अपने तरीके हो सकते हैं या वैकल्पिक रूप से अपने मूल वर्ग (या इसके ग्रैंड पैरेंट क्लास में से एक) में पहले से परिभाषित विधियों के लिए अपने स्वयं के कार्यान्वयन हो सकते हैं। इसलिए जब बाद वाला होता है, तो इसे मेथड ओवरराइडिंग कहा जाता है। दूसरे शब्दों में, यदि बाल वर्ग एक ही हस्ताक्षर और वापसी प्रकार के साथ एक विधि के लिए कार्यान्वयन प्रदान करता है जो पहले से ही अपने मूल वर्गों में से एक में परिभाषित विधि के रूप में है, तो उस विधि को बाल वर्ग के कार्यान्वयन द्वारा ओवरराइड (प्रतिस्थापित) कहा जाता है. इसलिए, यदि कक्षा में कोई ओवरराइड विधि है, तो रनटाइम सिस्टम को यह तय करना होगा कि किस विधि कार्यान्वयन का उपयोग किया जाता है। इस समस्या को ठीक प्रकार की वस्तु को देखकर हल किया जाता है जिसका उपयोग इसे लागू करने के लिए किया जाता है। यदि मूल वर्ग की किसी वस्तु का उपयोग ओवरराइड विधि को लागू करने के लिए किया जाता है, तो मूल वर्ग में कार्यान्वयन का उपयोग किया जाता है। इसी तरह, यदि यह चाइल्ड क्लास की एक वस्तु है जिसका उपयोग किया जाता है, तो चाइल्ड क्लास के कार्यान्वयन का उपयोग किया जाता है। जावा, ईफेल, सी ++ और पायथन जैसी आधुनिक प्रोग्रामिंग भाषाएं विधि को ओवरराइड करने की अनुमति देती हैं।
ओवरलोडिंग क्या है?
विधि ओवरलोडिंग कुछ प्रोग्रामिंग भाषाओं द्वारा एक ही नाम के साथ एक से अधिक विधि बनाने के लिए प्रदान की जाने वाली एक सुविधा है, लेकिन विभिन्न इनपुट और आउटपुट प्रकारों के साथ। जावा, C, C++ और VB. NET जैसी आधुनिक प्रोग्रामिंग भाषाओं में यह सुविधा उपलब्ध है। आप एक ही नाम के साथ दूसरी विधि बनाकर एक विधि को अधिभारित कर सकते हैं लेकिन एक अलग विधि हस्ताक्षर या एक अलग रिटर्न प्रकार (या दोनों) के साथ। उदाहरण के लिए, यदि आपके पास एक ही कक्षा के अंदर मेथड 1 (टाइप 1 टी 1) और मेथड 1 (टाइप 2 टी 2) है, तो वे ओवरलोडेड हैं। फिर सिस्टम को यह तय करना होगा कि इसे कॉल करने पर किसको निष्पादित किया जाए। यह भेदभाव विधि में पारित किए गए पैरामीटर के प्रकार को देखकर किया जाता है। यदि तर्क टाइप 1 का है, तो पहला कार्यान्वयन कहा जाता है, जबकि यदि यह टाइप 2 का है, तो दूसरा कार्यान्वयन कहा जाता है।
ओवरलोडिंग और ओवरलोडिंग में क्या अंतर है?
यद्यपि, मेथड ओवरराइडिंग और मेथड ओवरलोडिंग का उपयोग विभिन्न कार्यान्वयन के साथ एक विधि प्रदान करने के लिए किया जाता है, इन दो अवधारणाओं/तकनीकों के बीच महत्वपूर्ण अंतर हैं।सबसे पहले तो मेथड ओवरराइडिंग के सब्जेक्ट हमेशा अलग-अलग क्लास में रहते हैं, जबकि मेथड ओवरलोडिंग के सब्जेक्ट एक ही क्लास में रहते हैं। इसका मतलब है कि ओवरराइडिंग केवल ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग लैंग्वेज में ही संभव है जो इनहेरिटेंस की अनुमति देता है, जबकि ओवरलोडिंग एक गैर-ऑब्जेक्ट-ओरिएंटेड भाषा में भी उपलब्ध हो सकती है। दूसरे शब्दों में, आप सुपर क्लास में एक विधि को ओवरराइड करते हैं लेकिन आप अपनी कक्षा के भीतर एक विधि को अधिभारित करते हैं।
एक और अंतर यह है कि ओवरराइड विधियों में एक ही विधि का नाम, विधि हस्ताक्षर और वापसी प्रकार होता है, लेकिन अतिभारित विधियों को हस्ताक्षर या वापसी प्रकार (नाम समान होना चाहिए) में भिन्न होना चाहिए। दो ओवरराइड विधियों के बीच अंतर करने के लिए, उपयोग की जाने वाली विधियों आईडी को लागू करने के लिए उपयोग की जाने वाली वस्तु का सटीक प्रकार, जबकि दो अतिभारित विधियों के बीच अंतर करने के लिए पैरामीटर के प्रकार का उपयोग किया जाता है। एक और महत्वपूर्ण अंतर यह है कि ओवरलोडिंग को संकलन समय पर हल किया जाता है, जबकि ओवरराइडिंग को रनटाइम पर हल किया जाता है।