दोनों विधि के नाम का पुनः उपयोग करते हैं, लेकिन वे बुनियादी रूप से भिन्न हैं। = समान नाम, , एक ही कक्षा में, में हल किया गया। = एक उप-कक्षा एक मूल विधि को के साथ, में हल किया गया।
दोनों विधि के नाम का पुनः उपयोग करते हैं, लेकिन वे बुनियादी रूप से भिन्न हैं। = समान नाम, , एक ही कक्षा में, में हल किया गया। = एक उप-कक्षा एक मूल विधि को के साथ, में हल किया गया।
| अधिभार | अधिलेखन | |
|---|---|---|
| हस्ताक्षर | भिन्न होना चाहिए (params) | समान होना चाहिए |
| संबंध | समान कक्षा | मूल ↔ उप-कक्षा |
| हल किया गया | संकलन समय (स्थिर) | रनटाइम (गतिशील) |
| उद्देश्य | सुविधा / प्रकार | बहुरूपता |
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#) का उपयोग करें ताकि संकलक इसे पकड़ ले।
अधिलेखन बहुरूपता का इंजन है — रनटाइम तंत्र जो "एक इंटरफेस, कई कार्यान्वयन" को काम करता है।
अंतर जानना एक शास्त्रीय बग को रोकता है: यह सोचना कि आपने व्यवहार को बदल दिया है जब आपने वास्तव में एक दूसरी, कभी नहीं बुलाई गई विधि बनाई है।
विस्तृत उत्तरों के साथ IT इंटरव्यू प्रश्नों की एक लाइब्रेरी — जूनियर से सीनियर तक।
दान करें