दोन्ही मेथडचे नाव पुन्हा वापरतात, परंतु ते मूलभूतपणे वेगळे आहेत। = समान नाव, , समान क्लासमध्ये, ला सोडवले जाते। = सबक्लास पेरेंट मेथडला सह , ला सोडवले जाते।
दोन्ही मेथडचे नाव पुन्हा वापरतात, परंतु ते मूलभूतपणे वेगळे आहेत। = समान नाव, , समान क्लासमध्ये, ला सोडवले जाते। = सबक्लास पेरेंट मेथडला सह , ला सोडवले जाते।
| ओव्हरलोडिंग | ओव्हररायडिंग | |
|---|---|---|
| सिग्नेचर | भिन्न असणे आवश्यक (पॅरामीटर) | समान असणे आवश्यक |
| संबंध | समान क्लास | पेरेंट ↔ सबक्लास |
| सोडवले जाते | कम्पाइल टाइम (स्थिर) | रनटाइम (गतिशील) |
| उद्देश्य | सुविधा / व्हेरिएंट्स | पॉलिमॉर्फिজम |
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#) वापरा जेणेकरून कम्पाइलर ते पकडेल।
ओव्हररायडिंग पॉलिमॉर्फिজमचा इंजिन आहे — रनटाइम मेकॅनिজम जो "एक इंटरफेस, अनेक इम्प्लीमेंटेशन्स" काम करते.
फरक जाणून घेणे एक क्लासिक बग टाळते: विचार करणे की तुम्ही वर्तन बदलले जेव्हा तुम्ही वास्तवात एक दुसरी, कधीही कॉल न केलेली मेथड तयार केली।