विधि अधिभार
आज का हमारा नया और दिलचस्प विषय है मेथड ओवरलोडिंग । सावधान रहें - मेथड ओवरलोडिंग को मेथड ओवरराइडिंग के साथ भ्रमित नहीं होना चाहिए।
ओवरराइडिंग के विपरीत, ओवरलोडिंग एक बहुत ही सरल ऑपरेशन है। यह वास्तव में विधियों पर एक ऑपरेशन नहीं है, हालांकि कभी-कभी इसे भयानक शब्द पैरामीट्रिक बहुरूपता द्वारा संदर्भित किया जाता है ।
यहाँ मुद्दा यह है कि एक वर्ग के भीतर सभी विधियों के अद्वितीय नाम होने चाहिए। खैर, यह पूरी तरह सही नहीं है। ठीक है, अधिक सटीक, यह बिल्कुल सटीक नहीं है। विधि का नाम अद्वितीय नहीं होना चाहिए। क्या अद्वितीय होना चाहिए विधि के नाम और विधि के मापदंडों के प्रकार का मिलन है। इस संघ को विधि हस्ताक्षर के रूप में जाना जाता है
उदाहरण:
कोड | विवरण |
---|---|
|
इसकी अनुमति है। दो विधियों के अद्वितीय नाम हैं। |
|
और यह भी। दो विधियों में अद्वितीय नाम (हस्ताक्षर) हैं। |
|
तरीके अभी भी अनोखे हैं |
|
लेकिन इसकी अनुमति नहीं है । तरीके अनोखे नहीं हैं । भले ही वे विभिन्न प्रकार लौटाते हों। |
|
लेकिन आप ऐसा कर सकते हैं । विधि पैरामीटर अद्वितीय हैं |
हस्ताक्षर में विधि का नाम और पैरामीटर प्रकार शामिल हैं । इसमें विधि का रिटर्न प्रकार और पैरामीटर नाम शामिल नहीं हैं । एक वर्ग में एक ही हस्ताक्षर के साथ दो विधियाँ नहीं हो सकती हैं - संकलक को यह नहीं पता होगा कि किसे कॉल करना है।
पैरामीटर नाम मायने नहीं रखते , क्योंकि वे संकलन के दौरान खो जाते हैं। एक बार विधि संकलित हो जाने के बाद, केवल उसका नाम और पैरामीटर प्रकार ज्ञात होते हैं। वापसी का प्रकार खो नहीं गया है, लेकिन विधि के परिणाम को कुछ भी असाइन करने की आवश्यकता नहीं है, इसलिए यह हस्ताक्षर में भी शामिल नहीं है।
OOP सिद्धांतों के अनुसार , बहुरूपता एक इंटरफ़ेस के पीछे विभिन्न कार्यान्वयनों को छिपा रहा है। जब हम System.out.println()
मेथड को कॉल करते हैं, उदाहरण के लिए, अलग-अलग मेथड्स को कॉल किया जाता है, जिसके आधार पर तर्क पारित किए जाते हैं। यह कार्रवाई में बहुरूपता है।
इसीलिए एक ही वर्ग में निहित समान नामों वाली विभिन्न विधियों को बहुरूपता का कमजोर रूप माना जाता है।
GO TO FULL VERSION