উভয়ই মেথডের নাম পুনরায় ব্যবহার করে, কিন্তু তারা মৌলিকভাবে ভিন্ন। = একই নাম, , একই ক্লাসে, সমাধান করা হয়। = একটি সাবক্লাস প্যারেন্ট মেথডকে করে, সমাধান করা হয়।
উভয়ই মেথডের নাম পুনরায় ব্যবহার করে, কিন্তু তারা মৌলিকভাবে ভিন্ন। = একই নাম, , একই ক্লাসে, সমাধান করা হয়। = একটি সাবক্লাস প্যারেন্ট মেথডকে করে, সমাধান করা হয়।
| ওভারলোডিং | ওভাররাইডিং | |
|---|---|---|
| স্বাক্ষর | অবশ্যই ভিন্ন হবে (প্যারামিটার) | অবশ্যই একই হবে |
| সম্পর্ক | একই ক্লাস | প্যারেন্ট ↔ সাবক্লাস |
| সমাধান হয় | কম্পাইল সময়ে (static) | রানটাইমে (dynamic) |
| উদ্দেশ্য | সুবিধা / ভেরিয়েন্ট | পলিমরফিজম |
class Printer {
void print(String s) { System.out.println(s); }
void print(int n) { System.out.println(n); } // same name, diff param
void print(String s, int times) { /* ... */ }
}
কম্পাইলার আর্গুমেন্ট টাইপের উপর ভিত্তি করে কোন print বেছে নেয় — কোনো ইনহেরিটেন্স জড়িত নেই।
class Animal { String speak() { return "..."; } }
class Dog extends Animal {
@Override
String speak() { return "Woof"; } // replaces Animal.speak()
}
Animal a = new Dog();
a.speak(); // "Woof" — runtime picks Dog's version (dynamic dispatch)
একটি ঘন ঘন ভুল হল যখন আপনি ওভাররাইড করতে চেয়েছিলেন তখন ভুলভাবে ওভারলোড করা (উদাহরণস্বরূপ স্বাক্ষরে একটি টাইপো)। সর্বদা @Override (Java) বা override (C#) ব্যবহার করুন যাতে কম্পাইলার এটি ধরতে পারে।
ওভাররাইডিং হল পলিমরফিজমের ইঞ্জিন — রানটাইম মেকানিজম যা "একটি ইন্টারফেস, অনেক বাস্তবায়ন" কাজ করে তোলে।
পার্থক্য জানা একটি ক্লাসিক বাগ প্রতিরোধ করে: ভাবা যে আপনি আচরণ প্রতিস্থাপন করেছেন যখন আপনি আসলে একটি দ্বিতীয়, কখনও কল করা হয় না এমন মেথড তৈরি করেছেন।