Overloading vs Overriding
दो मिलते-जुलते विचार
Overloading और overriding एक जैसे सुनाई देते हैं पर बहुत अलग हैं। Overloading एक class में एक नाम वाली कई methods होने के बारे में है (अलग parameters)। Overriding child class द्वारा parent की method बदलने के बारे में है। दोनों polymorphism के रूप हैं।
Method overloading
class Calc {
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
int add(int a, int b, int c) { return a + b + c; }
}
// इस्तेमाल:
Calc c = new Calc();
System.out.println(c.add(2, 3)); // 5
System.out.println(c.add(2.5, 1.5)); // 4.0
System.out.println(c.add(1, 2, 3)); // 6
4.0
6
तीन methods add नाम साझा करती हैं पर parameters में भिन्न हैं। Java arguments से मेल खाता चुनती है — यह overloading है, compile time पर तय।
Method overriding
class Animal {
void sound() { System.out.println("Some sound"); }
}
class Dog extends Animal {
@Override
void sound() { System.out.println("Woof"); }
}
// इस्तेमाल:
Animal a = new Dog();
a.sound(); // Woof (child का version)
Dog उसी signature के साथ sound() override करता है। भले a Animal typed हो, असली object Dog है, तो child का version चलता है — runtime पर तय।
Compile-time बनाम runtime
- Overloading = compile-time polymorphism। Compiler argument types से method चुनता है।
- Overriding = runtime polymorphism। JVM run time पर असली object के आधार पर चुनता है।
इसीलिए overloading को static, और overriding को dynamic polymorphism भी कहते हैं।
आमने-सामने तुलना
| बात | Overloading | Overriding |
|---|---|---|
| कहाँ | एक ही class | Parent और child |
| Parameters | भिन्न होने चाहिए | एक जैसे होने चाहिए |
| Method नाम | एक जैसा | एक जैसा |
| हल होता है | Compile time | Runtime |
| Inheritance चाहिए | नहीं | हाँ |
आम गलतियाँ
- सिर्फ़ return type बदलना। Overloading को अलग parameters चाहिए, सिर्फ़ अलग return type नहीं।
- Override करते समय अलग signature। Child method बिल्कुल मेल खानी चाहिए, वरना यह overload बन जाती है।
@Overrideछोड़ना। यह वैकल्पिक है पर signature गलतियाँ जल्दी पकड़ता है।- Inheritance बिना overriding की उम्मीद। Overriding को parent-child संबंध चाहिए।
सारांश
- Overloading: एक नाम, अलग parameters, एक class में (compile time)।
- Overriding: एक signature, child parent की method बदलता है (runtime)।
- Overloading को inheritance नहीं चाहिए; overriding को चाहिए।
- Overloading static polymorphism है; overriding dynamic।
- Override करते समय गलतियाँ पकड़ने को
@Overrideइस्तेमाल कीजिए।
आगे, inheritance दोहराइए, या methods सुरक्षित दोबारा इस्तेमाल कीजिए Java methods से।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Overloading और overriding में क्या अंतर है?
Method overloading क्या है?
add(int, int) और add(double, double)। Java arguments से सही वाला compile time पर चुनती है।Method overriding क्या है?
Overloading compile-time है या runtime?
@Override annotation किसलिए है?
@Override compiler को बताता है आप parent method override करने का इरादा रखते हैं। अगर आपका signature असल में parent method से मेल न खाए, compiler error flag करता है — typos के ख़िलाफ़ सहायक safety जाँच।