Java में ओवरराइडिंग
पैरेंट विधि को चाइल्ड पर फिर लिखें ताकि कॉल चाइल्ड बॉडी चलाए। Truck extends Car रखिए। Car पर horn रखिए जो beep छापे। Truck पर फिर horn लिखिए जो honk छापे। Yard.java में एक Truck बनाइए और t.horn() बुलाइए। javac Yard.java से कंपाइल कर java Yard चलाइए। स्क्रीन को honk दिखाना चाहिए। दूसरी डेमो एक सादा Car भी बनाती है ताकि आप पैरेंट से beep और चाइल्ड से honk सुनें। इंटरफ़ेस अगले पृष्ठ के लिए छोड़ दें — यह पाठ एक विधि नाम और दो बॉडी है।
चाइल्ड पर horn फिर लिखिए
इनहेरिटेंस पृष्ठ ने Truck खाली छोड़ा ताकि t.horn() पैरेंट beep रखे। super पृष्ठ ने कंस्ट्रक्टर super से चलाए। यह पृष्ठ चाइल्ड पर विधि बॉडी बदलता है। Yard.java खोलिए। पब्लिक क्लास नाम Yard रखिए। अगर विधि कहानी दबाएँ तो केवल-कंस्ट्रक्टर प्रिंट car और truck, बचे पथ डेमो, Store लेखक, और कीबोर्ड Scanner हटा दीजिए। प्रोग्राम टाइपिंग का इंतज़ार न करे। import लाइन की ज़रूरत नहीं।
पैरेंट को इंस्टेंस विधि से घोषित करिए जो beep छापे:
class Car {
void horn() {
System.out.println("beep");
}
}
चाइल्ड को extends Car से घोषित करिए। Truck के अंदर वही विधि नाम फिर लिखिए, पर honk छापिए:
void horn() {
System.out.println("honk");
}
मिलता नाम और मिलती खाली पैरामीटर सूची का मतलब है कि Truck ऑब्जेक्ट के लिए चाइल्ड संस्करण पैरेंट संस्करण की जगह लेता है। आप दूसरी असंबंधित विधि नहीं जोड़ रहे। आप horn ओवरराइड कर रहे हैं।
Yard.main में एक ट्रक बनाइए और विधि बुलाइए:
Truck t = new Truck();
t.horn();
कॉल Truck पर लिखी बॉडी चलाती है, इसलिए स्क्रीन honk छापती है।
class Car {
void horn() {
System.out.println("beep");
}
}
class Truck extends Car {
void horn() {
System.out.println("honk");
}
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
t.horn();
}
}
जिस फ़ोल्डर में Yard.java है वहाँ से javac Yard.java चलाइए। जब कोष्ठक, ब्रेस और सेमीकोलन मेल खाते हैं, javac अपनी कोई पंक्ति नहीं लिखता। फिर java Yard चलाइए — java Yard.java नहीं। रन कमांड से .java अंत छोड़ दीजिए। फ़ाइल में एक पब्लिक क्लास रखिए ताकि नाम Yard से मेल खाए। सहायक टाइप Car और Truck इस शुरुआती रूप में बिना public रहें।
स्क्रीन honk दिखाती है। रन एक बार घुमाइए। Java Yard.main से शुरू होता है। new Truck() एक ट्रक बनाता है। t.horn() t के असली टाइप को देखता है। क्योंकि Truck ने अपना horn लिखा, वही चाइल्ड बॉडी चलती है और honk छापती है। पैरेंट beep बॉडी Car पर रहती है और इस ट्रक कॉल के लिए इस्तेमाल नहीं होती।
अगर अभी भी beep दिखे, जाँचिए कि Truck में सच में horn विधि है या नहीं। इनहेरिटेंस पृष्ठ का खाली Truck अभी भी beep इनहेरिट करता है। ओवरराइड के लिए चाइल्ड विधि उसी नाम से मौजूद होनी चाहिए। अगर कंस्ट्रक्टर डेमो से अभी भी car फिर truck दिखे, ओवरराइड शिक्षण फ़ाइल पर जाएँ और फिर java Yard चलाइए।
स्क्रीन देखते हुए नियम ज़ोर से बोलिए: चाइल्ड पर वही विधि नाम, उस ऑब्जेक्ट के लिए चाइल्ड बॉडी जीतती है। extends Car रखिए ताकि Truck Car का एक प्रकार रहे। बिना extends, Truck पर horn अलग टाइप कहानी होती, पैरेंट विधि का ओवरराइड नहीं।
इस पृष्ठ पर interface फ़ाइल न बनाएँ। इंटरफ़ेस अगले पाठ का इंतज़ार करते हैं। आज एक क्लास पदानुक्रम दो horn बॉडी रखता है, और चाइल्ड बॉडी ट्रक कॉल का जवाब देती है।
पैरेंट beep और चाइल्ड honk साथ-साथ
दूसरा प्रोग्राम ओवरराइड रखता है। main एक Car और एक Truck बनाता है, फिर दोनों पर horn बुलाता है। पैरेंट अभी भी beep छापता है। चाइल्ड अभी भी honk छापता है।
class Car {
void horn() {
System.out.println("beep");
}
}
class Truck extends Car {
void horn() {
System.out.println("honk");
}
}
public class Yard {
public static void main(String[] args) {
Car c = new Car();
Truck t = new Truck();
c.horn();
t.horn();
}
}
javac Yard.java से कंपाइल करिए, फिर java Yard चलाइए। स्क्रीन पहले beep, फिर honk दिखाती है। पहली पंक्ति Car ऑब्जेक्ट से आती है। दूसरी पंक्ति Truck ऑब्जेक्ट से आती है। चाइल्ड पर ओवरराइड पैरेंट ऑब्जेक्ट के लिए पैरेंट विधि मिटाता नहीं। हर ऑब्जेक्ट अपनी टाइप की बॉडी इस्तेमाल करता है।
दोनों horn विधियाँ एक बार फिर पढ़िए। वही नाम। वही खाली पैरामीटर सूची। अलग प्रिंट पाठ। वही सिग्नेचर समानता चाइल्ड संस्करण को ओवरराइड बनाती है, नई असंबंधित विधि नहीं। अगर आप चाइल्ड विधि का नाम बदल दें, इनहेरिटेंस फिर ट्रकों पर beep रखेगा, और आप ओवरराइड नहीं सिखा रहे होंगे।
अगर कंस्ट्रक्टर super() डेमो फ़ोल्डर में बची हैं, इतिहास की तरह रखिए। इस पाठ के लिए ओवरराइड शिक्षण फ़ाइल चलाइए ताकि स्क्रीन विधि प्रिंट दिखाए, कंस्ट्रक्टर क्रम शब्द नहीं। अगर javac डुप्लिकेट पब्लिक क्लास की शिकायत करे, फ़ाइल में अभी भी एक से अधिक पब्लिक क्लास है — केवल Yard पब्लिक रखिए।
पैरेंट बॉडी बनाम चाइल्ड बॉडी
📊 Who prints what for horn
| Role | horn body |
|---|---|
Parent Car |
prints beep |
Child Truck |
prints honk (overrides) |
तालिका इस पृष्ठ का छोटा नक्शा है। अकेले इनहेरिटेंस में जब चाइल्ड खाली रहे तो दोनों भूमिकाओं पर beep रहता। ओवरराइड के बाद चाइल्ड पंक्ति honk हो जाती है जबकि पैरेंट पंक्ति beep रहती है। जब दूसरी डेमो दोनों पंक्तियाँ छापे तो यह नक्शा याद रखिए। |
खाली extends और super से तुलना
इनहेरिटेंस पृष्ठ पर खाली Truck ने पैरेंट horn रखा और beep छापा। super पृष्ठ पर कंस्ट्रक्टर super से चले और car फिर truck छापा। इस पृष्ठ पर विधि खुद चाइल्ड पर बदलती है। आपको अभी भी extends चाहिए। बाद में आप अभी भी कंस्ट्रक्टर इस्तेमाल कर सकते हैं। अभी इंटरफ़ेस की ज़रूरत नहीं।
अगर खाली Truck अभी खुला है, स्क्रीन तय करने से पहले वह चाइल्ड horn जोड़िए जो honk छापे। अगर कंस्ट्रक्टर फ़ाइल अभी खुली है, ओवरराइड फ़ाइल पर जाएँ ताकि t.horn() परीक्षण वाली कॉल हो। नए टोकन चाइल्ड पर फिर लिखी विधि और दो अलग स्क्रीन शब्द beep व honk हैं।
इंटरफ़ेस से पहले
आप Truck पर horn फिर लिख सकते हैं और t.horn() से honk देख सकते हैं। आप c.horn() और t.horn() दोनों बुलाकर beep फिर honk देख सकते हैं। हर रखी डेमो के लिए Yard.java कंपाइल कर java Yard बारी-बारी चलाइए। चाइल्ड बॉडी ने ट्रक कॉल का जवाब दिया। अगला पृष्ठ इंटरफ़ेस है, जहाँ एक टाइप केवल extends पर टिके बिना विधियाँ वादा कर सकता है।
साफ़ ओवरराइड के लिए एक-ट्रक honk डेमो रखिए। साफ़ पैरेंट-बनाम-चाइल्ड कंट्रास्ट के लिए दो-ऑब्जेक्ट डेमो रखिए। इंटरफ़ेस फ़ाइलें इस पृष्ठ से बाहर रखिए। ये तीन आदतें आगे बढ़ने से पहले चेकपॉइंट हैं। जब t.horn() के बाद honk आए और c.horn() के बाद अभी भी beep आए, ओवरराइड ने इस पाठ का काम किया और आप इंटरफ़ेस वाले अगले विषय के लिए तैयार हैं।
फ़ोल्डर का आखिरी चक्कर: एक पब्लिक Yard, दो सहायक टाइप, honk छापने वाला चाइल्ड horn, कोई कीबोर्ड इंतज़ार नहीं, कोई जबरन इंटरफ़ेस नहीं। खुली डेमो पर एक बार और javac Yard.java तथा java Yard चलाइए। अगर स्क्रीन अभी भी तालिका से मेल खाए — पैरेंट beep, चाइल्ड honk — ओवरराइड मज़बूत है और कोर्स अगले पृष्ठ पर इंटरफ़ेस पर जा सकता है।
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी