दुवै method को नाम पुन: प्रयोग गर्छन्, तर तिनीहरु मौलिक रूपमा फरक छन्। = एकै नाम, , एकै class मा, मा समाधान गरिन्छ। = एक subclass ले parent method लाई को साथ , मा समाधान गरिन्छ।
दुवै method को नाम पुन: प्रयोग गर्छन्, तर तिनीहरु मौलिक रूपमा फरक छन्। = एकै नाम, , एकै class मा, मा समाधान गरिन्छ। = एक subclass ले parent method लाई को साथ , मा समाधान गरिन्छ।
| Overloading | Overriding | |
|---|---|---|
| Signature | फरक हुनुपर्छ (params) | समान हुनुपर्छ |
| संबंध | एकै class | Parent ↔ subclass |
| समाधान | Compile time (static) | Runtime (dynamic) |
| उद्देश्य | सुविधा / विविधताहरु | Polymorphism |
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) { /* ... */ }
}
Compiler ले argument types को आधारमा कुन print छनोट गर्छ — कुनै inheritance समावेश छैन।
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 गर्न खोजेको समयमा accidentally overloading गर्नु हो (जस्तै signature मा typo)। सधैं @Override (Java) वा override (C#) प्रयोग गर्नुहोस् ताकि compiler ले यसलाई समात्छ।
Overriding polymorphism को इञ्जिन हो — runtime तन्त्र जसले "एक interface, धेरै implementations" लाई काम गर्छ।
फरक जान्नु भनेको एक शास्त्रीय बग निवारण गर्छ: सोच्न सकेको कि तपाईंले व्यवहार बदलेकी हुनुहुन्छ जब तपाईंले वास्तवमा एक दोस्रो, कहिले पनि-कल गरिएको विधि सिर्जना गरेकी हुनुहुन्छ।