Java में मेथड ओवरलोडिंग एक फीचर है जिसकी मदद से एक क्लास में एक ही नाम के कई मेथड रखे जा सकते हैं, जिनकी पैरामीटर सूचियाँ अलग-अलग हों। यह कंपाइल-टाइम (या स्टैटिक) पॉलिमॉर्फिज़्म से जुड़ा हुआ है। यह कॉन्सेप्ट उन मेथड को बनाने के लिए बहुत ज़रूरी है जो एक जैसे काम करते हैं, लेकिन अलग-अलग इनपुट लेते हैं।
मेथड ओवरलोडिंग से प्रोग्राम की पठनीयता बढ़ती है। अलग-अलग मेथड को एक ही नाम दिया जा सकता है, लेकिन उनके पैरामीटर अलग-अलग होते हैं। पैरामीटर की संख्या या उनके टाइप के आधार पर उससे मेल खाता मेथड कॉल किया जाता है।
मेथड ओवरलोडिंग का आधार मेथड का सिग्नेचर है। अगर दो मेथड के सिग्नेचर अलग-अलग हों, तो उन्हें अलग माना जाएगा। किसी मेथड को ओवरलोड करने के दो तरीके हैं:
पैरामीटर की संख्या अलग-अलग: मेथड का नाम एक ही हो सकता है, लेकिन पैरामीटर की संख्या अलग-अलग हो सकती है।
public class Display {
public void show(int x) {
System.out.println("Show with int: " + x);
}
public void show(int x, int y) {
System.out.println("Show with two ints: " + x + ", " + y);
}
}
पैरामीटर के टाइप अलग-अलग: मेथड का नाम और पैरामीटर की संख्या एक ही हो सकती है, लेकिन टाइप अलग-अलग हो सकते हैं।
public class Display {
public void show(int x) {
System.out.println("Show with int: " + x);
}
public void show(String s) {
System.out.println("Show with String: " + s);
}
}
इस कॉन्सेप्ट में हम Java में मेथड ओवरलोडिंग के कई उदाहरण और बारीकियाँ देखेंगे।
इस अभ्यास में आप अपने सबसे अच्छे दोस्तों के साथ "Wizard and Warriors" नाम का एक रोल-प्लेइंग गेम खेल रहे हैं। आप गेम मास्टर हैं, यानी वह व्यक्ति जिसका काम खिलाड़ियों के लिए गेम की दुनिया को जीवंत बनाना है। इसमें सबसे ज़रूरी काम है खिलाड़ियों को गेम के बारे में बताना: किसी पात्र की स्थिति क्या है, जिस नगर में वह जा रहा है वह कैसा दिखता है, वगैरह।
यहाँ पाँच काम हैं, जिनमें आपको खिलाड़ियों को गेम के अलग-अलग भागों का वर्णन करना है।
हर पात्र की एक क्लास, एक लेवल और हिट पॉइंट की संख्या होती है, और उसका वर्णन इस तरह किया जाता है: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points."।
ऐसा GameMaster.describe मेथड लागू कीजिए जो अपने एकमात्र पैरामीटर के रूप में एक Character लेता है और उसका वर्णन लौटाता है।
Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);
new GameMaster().describe(character);
// => "You're a level 4 Wizard with 28 hit points."
हर गंतव्य का एक नाम और निवासियों की संख्या होती है, और उसका वर्णन इस तरह किया जाता है: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants."।
ऐसा GameMaster.describe मेथड लागू कीजिए जो अपने एकमात्र पैरामीटर के रूप में एक Destination लेता है और उसका वर्णन लौटाता है।
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(destination);
// => "You've arrived at Muros, which has 732 inhabitants."
पात्र किसी गंतव्य तक दो तरीकों में से किसी एक से यात्रा कर सकते हैं:
"You're traveling to your destination by walking."।"You're traveling to your destination on horseback."।ऐसा GameMaster.describe मेथड लागू कीजिए जो अपने एकमात्र पैरामीटर के रूप में एक TravelMethod लेता है और उसका वर्णन लौटाता है।
new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."
जब कोई पात्र किसी गंतव्य तक यात्रा कर रहा हो, तो उसका वर्णन अलग-अलग वर्णनों को जोड़कर किया जाता है: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>"।
ऐसा GameMaster.describe मेथड लागू कीजिए जो अपने पैरामीटर के रूप में एक Character, एक Destination और एक TravelMethod लेता है और उसका वर्णन लौटाता है।
Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(character, destination, TravelMethod.HORSEBACK);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination on horseback. You've arrived at Muros, which has 732 inhabitants."
अधिकांश मामलों में पात्र पैदल चलकर गंतव्य तक यात्रा करते हैं। सुविधा के लिए खिलाड़ी अपना यात्रा तरीका बताना छोड़ सकते हैं। ऐसी स्थिति में मान लिया जाता है कि यात्रा का तरीका पैदल चलना है। ऐसा GameMaster.describe मेथड लागू कीजिए जो अपने पैरामीटर के रूप में एक Character और एक Destination लेता है और उसका वर्णन लौटाता है।
Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(character, destination);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination by walking. You've arrived at Muros, which has 732 inhabitants."
Exercism पर साइन अप कीजिए और Java को 26 कॉन्सेप्ट158 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।