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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।