इनहेरिटेंस OOP (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) की एक मुख्य अवधारणा है। यह IS-A संबंध को दर्शाता है। प्रोग्रामिंग में इसका अर्थ बिल्कुल वही है जो अंग्रेज़ी में है: पैरेंट से विशेषताएँ विरासत में लेना (प्रोग्रामिंग में विशेषताएँ आम तौर पर फंक्शन और वेरिएबल होती हैं)।
एक क्लास Animal पर विचार कीजिए, जैसा कि यहाँ दिखाया गया है,
//Creating an Animal class with bark() as a member function.
public class Animal {
public void bark() {
System.out.println("This is an animal");
}
}
Animal एक पैरेंट क्लास है, क्योंकि इस क्लास की जो प्रॉपर्टी हैं, उन्हें सामान्य रूप से सभी जानवरों तक बढ़ाया जा सकता है।
एक जानवर की कल्पना कीजिए, जिसका नाम Lion है और जिसकी क्लास कुछ ऐसी है,
//Lion class is a child class of Animal.
public class Lion extends Animal {
@Override
public void bark() {
System.out.println("Lion here!!");
}
}
Override एनोटेशन यह बताने के लिए इस्तेमाल किया जाता है कि सबक्लास का कोई मेथड अपने सुपरक्लास के मेथड को ओवरराइड कर रहा है।
यह कड़ाई से ज़रूरी नहीं है, लेकिन इसे इस्तेमाल करना अच्छी आदत है।
अब जब भी हम यह करते हैं,
Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();
ध्यान दीजिए: यहाँ Animal क्लास को Lion से इनिशियलाइज़ किया जा रहा है।
आउटपुट कुछ इस तरह होगा
Lion here!!
OOP के अनुसार इनहेरिटेंस कई प्रकार के होते हैं, लेकिन Java उनमें से कुछ ही प्रकारों का समर्थन करता है (मल्टी-लेवल और हायरार्किकल)। इसके बारे में और पढ़ने के लिए यह पढ़िए।
इस अभ्यास में आप एक रोल-प्लेइंग गेम खेल रहे हैं, जिसमें अलग-अलग तरह के फाइटर एक-दूसरे से लड़ सकते हैं। हर तरह के फाइटर के लिए गेम के नियम अलग-अलग हैं। हम दो खास तरहों पर ध्यान देंगे: Wizard और Warrior।
Warrior के लिए ये नियम हैं:
6 अंक का नुकसान पहुँचाता है।10 अंक का नुकसान पहुँचाता है।Wizard के लिए ये नियम हैं:
12 अंक का नुकसान पहुँचाता है।3 अंक का नुकसान पहुँचाता है।Warrior नाम की एक नई क्लास बनाइए।
यह क्लास मौजूदा Fighter क्लास से इनहेरिट करनी चाहिए।
Warrior क्लास को इस तरह बदलिए कि उसका toString() मेथड बताए कि यह किस तरह का फाइटर है।
इस मेथड को "Fighter is a Warrior" स्ट्रिंग लौटानी चाहिए।
Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"
Warrior क्लास को इस तरह बदलिए कि उसका isVulnerable() मेथड हमेशा false लौटाए।
Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false
Warrior क्लास को इस तरह बदलिए कि उसका getDamagePoints(Fighter) मेथड ऊपर बताए गए नियमों के अनुसार Warrior द्वारा पहुँचाए जाने वाले नुकसान की गणना करे।
Warrior warrior = new Warrior();
Wizard wizard = new Wizard();
warrior.getDamagePoints(wizard);
// => 10
Wizard नाम की एक और नई क्लास बनाइए।
यह क्लास भी मौजूदा Fighter क्लास से इनहेरिट करनी चाहिए।
Wizard क्लास को इस तरह बदलिए कि उसका toString() मेथड बताए कि यह किस तरह का फाइटर है।
इस मेथड को "Fighter is a Wizard" स्ट्रिंग लौटानी चाहिए।
Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"
Wizard क्लास में बदलाव कीजिए और prepareSpell() नाम का एक मेथड जोड़िए।
क्लास को याद रखना चाहिए कि यह मेथड कब कॉल किया गया, और यह सुनिश्चित करना चाहिए कि उसका isVulnerable() मेथड तभी false लौटाए जब कोई मंत्र तैयार हो।
Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false
Wizard क्लास को इस तरह बदलिए कि उसका getDamagePoints(Fighter) मेथड ऊपर बताए गए नियमों के अनुसार Wizard द्वारा पहुँचाए जाने वाले नुकसान की गणना करे।
Wizard wizard = new Wizard();
Warrior warrior = new Warrior();
wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Exercism पर साइन अप कीजिए और Java को 26 कॉन्सेप्ट158 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।