Java में इनहेरिटेंस
extends से एक चाइल्ड टाइप बनाइए ताकि पैरेंट पर लिखा विधि इस्तेमाल हो सके। Car पर horn रखिए जो beep छापे। लिखिए class Truck extends Car। Yard.java में एक Truck बनाइए और t.horn() चलाइए। javac Yard.java से कंपाइल करके java Yard चलाइए। स्क्रीन पर beep दिखना चाहिए। दूसरी डेमो एक सादा Car भी बनाती है ताकि आप देखें चाइल्ड के बाद भी पैरेंट काम करता है। super अगले पृष्ठ के लिए छोड़ दें। इस पृष्ठ पर Truck पर horn दोबारा न लिखें — ओवरराइड बाद में आएगा।
चाइल्ड पैरेंट विधि रखता है
paths पृष्ठ ने Paths.get से जगहें नाम दीं। यह पृष्ठ नया मॉड्यूल शुरू करता है: एक क्लास दूसरी की चाइल्ड हो सकती है। Yard.java नाम की शिक्षण फ़ाइल खोलिए। पब्लिक क्लास नाम Yard रखिए ताकि फ़ाइल नाम से मेल खाए। बचे Route पथ डेमो, Store लेखक, Reader स्कैनर और कीबोर्ड Scanner हटाइए। प्रोग्राम टाइपिंग का इंतज़ार न करे। इस पाठ के लिए import लाइन की ज़रूरत नहीं।
पब्लिक क्लास के ऊपर package-private पैरेंट टाइप घोषित करिए:
class Car {
Car के अंदर इंस्टेंस विधि void horn() लिखिए जो beep छापे:
System.out.println("beep");
फिर चाइल्ड घोषित करिए:
class Truck extends Car {
इस पृष्ठ पर Truck का शरीर खाली रखिए। चाइल्ड horn दोबारा नहीं लिखता। खाली ब्रेस काफी हैं कहने के लिए कि Truck एक तरह का Car है।
Yard.main के अंदर ट्रक बनाइए और विरासत में मिली विधि चलाइए:
Truck t = new Truck();
t.horn();
कॉल इसलिए चलता है क्योंकि extends Car Truck को Car से जोड़ता है। आपने horn को Truck में कॉपी नहीं किया।
class Car {
void horn() {
System.out.println("beep");
}
}
class Truck extends Car {
}
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 रहते हैं। एक फ़ाइल में तीन पब्लिक क्लास javac को मना कर देती हैं — classes पृष्ठ का नियम याद रखिए।
स्क्रीन beep दिखाती है। रन एक बार चलाकर देखिए। Java Yard.main से शुरू होता है। new Truck() ट्रक ऑब्जेक्ट बनाता है। t.horn() विरासत से पैरेंट Car पर horn ढूँढता है। विधि beep छापती है। अगर javac कहे Truck पर horn नहीं मिला, तो extends Car लाइन गायब या गलत है — वापस लगाइए। अगर note.txt या पथ प्रिंट दिखे, तो Route का बचा हिस्सा अभी चल रहा है — java Yard पर जाइए। अगर टर्मिनल टाइपिंग का इंतज़ार करे, तो कीबोर्ड Scanner अभी फ़ाइल में है — हटा दें।
extends सावधानी से लिखिए। गलती से कोमा या implements शब्द यह पाठ नहीं है। यहाँ विरासत का मतलब चाइल्ड और पैरेंट नामों के बीच extends कीवर्ड है। चाइल्ड नाम पहले: Truck extends Car, उलटा नहीं।
इस पृष्ठ पर super न लिखें। पैरेंट कंस्ट्रक्टर को super से बुलाना अगला पाठ है। Truck के अंदर दूसरा horn भी न लिखें; ओवरराइड कहानी बाद में आती है। आज चाइल्ड खाली रहता है और फिर भी पैरेंट विधि इस्तेमाल करता है। वह खाली शरीर जानबूझकर सिखाना है, horn को Truck में कॉपी करके ठीक करने की गलती नहीं।
📊 Parent and child on this page
| Piece | Role |
|---|---|
| Car | parent type that owns horn |
| Truck | child type via extends Car |
| Yard | public starter with main |
| horn | prints beep; written only on Car |
पैरेंट अकेले अभी भी चलता है
दूसरा प्रोग्राम वही Car, वही खाली Truck extends Car और वही पब्लिक Yard रखता है। main के अंदर एक Car और एक Truck दोनों बनाइए और हर एक पर horn चलाइए।
class Car {
void horn() {
System.out.println("beep");
}
}
class Truck extends Car {
}
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, फिर फिर से beep दिखाती है। पहली लाइन सादे Car से आती है। दूसरी उस Truck से जिसने horn विरासत में पाया। चाइल्ड बनाने से पैरेंट टाइप मिटा या टूटा नहीं। दोनों ऑब्जेक्ट वही विधि शरीर चला सकते हैं जो एक बार Car पर लिखा गया। आप अभी भी हर ऑब्जेक्ट new से खुद बनाते हैं; extends लाइन अपने आप ट्रक नहीं बनाती।
यही अंतर चेकपॉइंट है। विरासत मौजूद विधि में चाइल्ड रास्ता जोड़ती है। पैरेंट हटाना ज़रूरी नहीं। अगर Truck से extends Car हटाएँ, तो t.horn() कंपाइल नहीं होगा क्योंकि Truck अब horn नहीं पाता। शिक्षण चाइल्ड के लिए extends रखिए। एक शांत beep चाहिए तो एक-ट्रक फ़ाइल लें। पैरेंट अभी जवाब देता है यह साबित करना हो तो दो-ऑब्जेक्ट फ़ाइल लें।
Route पर paths से तुलना
paths पृष्ठ पर java Route ने फ़ोल्डर और फ़ाइलें नाम दीं। इस पृष्ठ पर java Yard extends से टाइप जोड़ता है। Route फ़ाइलें इतिहास के तौर पर रखिए अगर पास हों; विरासत डेमो के लिए java Yard चलाइए ताकि स्क्रीन इस पाठ से मेल खाए।
extends, पैरेंट विधि का दोबारा उपयोग और खाली चाइल्ड शरीर नए टोकन हैं। पहले के OOP पृष्ठों से आप new और इंस्टेंस विधि जानते हैं। आज ये टुकड़े इस कोर्स रास्ते में पहली बार विरासत से मिलते हैं। शिक्षण नाम Car, Truck और Yard रखिए ताकि कंपाइल और रन कमांड छोटे और साफ रहें।
super के लिए यह पृष्ठ क्या छोड़ता है
यह पृष्ठ चाइल्ड दिखाता है जो super लिखे बिना पैरेंट विधि इस्तेमाल करता है। अगला पृष्ठ super लाता है ताकि चाइल्ड जानबूझकर पैरेंट से बात करे, खासकर कंस्ट्रक्टर के आसपास। यहाँ extends और विरासत में मिला horn कॉल पर टिके रहिए। अभी इन Yard डेमो पर super() ज़रूरी शर्त मत जोड़िए।
super से पहले
आप Truck extends Car लिख सकते हैं, Truck बना सकते हैं और horn से beep देख सकते हैं। सादा Car भी बना सकते हैं और देख सकते हैं पैरेंट अभी beep छापता है। Yard.java कंपाइल करके हर रखी डेमो के लिए बारी-बारी java Yard चलाइए। चाइल्ड खाली रहा और फिर भी पैरेंट विधि इस्तेमाल की। अगला पृष्ठ super है जहाँ चाइल्ड पैरेंट से सीधे बात करता है।
एक-ट्रक डेमो साफ विरासत कॉल के लिए रखिए। दो-ऑब्जेक्ट डेमो पैरेंट अकेले चलता है यह साबित करने के लिए रखिए। अभी इस पृष्ठ से super दूर रखिए। ये तीन आदतें आगे बढ़ने से पहले चेकपॉइंट हैं। जब उस Truck से beep आए जिसने कभी अपना horn नहीं लिखा, विरासत ने इस पाठ के लिए काम कर दिया और आप super वाले अगले विषय के लिए तैयार हैं।
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी