what is inheritance java tutorial with examples
यह ट्यूटोरियल जावा में इनहेरिटेंस की अवधारणा की व्याख्या करता है, संबंधित शब्द जैसे ’फैली हुई’ और ’सुपर’ कीवर्ड, सबक्लास, सुपरक्लास, ईएस-ए, एचएएस-ए रिश्ते आदि:
जावा में OOP के तीनों स्तंभों, Abstraction, Encapsulation और Polymorphism के बारे में जानने के बाद, हम OOP के अंतिम स्तंभ यानी इनहेरिटेंस पर आते हैं।
इस ट्यूटोरियल से शुरू करके हम अगले कुछ ट्यूटोरियल में जावा में इनहेरिटेंस पर चर्चा करेंगे।
=> आसान जावा प्रशिक्षण श्रृंखला के माध्यम से पढ़ें।
आप क्या सीखेंगे:
जावा में वंशानुक्रम
जावा में वंशानुक्रम को एक तकनीक या प्रक्रिया के रूप में परिभाषित किया जा सकता है जिसमें एक वर्ग की एक वस्तु किसी अन्य वस्तु के व्यवहार और गुणों को प्राप्त करती है। यह वर्ग को विरासत में देने या दो वर्गों के बीच संबंध स्थापित करने से होता है।
उदाहरण के लिए, एक मेंढक एक उभयचर है। एम्फ़िबियन वर्ग के अन्य जानवरों की तरह, फ्रॉग में कई विशेषताएं हो सकती हैं जो अन्य जानवरों के लिए सामान्य हैं। तो यहाँ एक एम्फ़िबियन एक प्रजाति है और मेंढक जैसे जानवर इसके सदस्य हैं।
यदि हमें OOP का उपयोग करते हुए एक सॉफ्टवेयर प्रतिनिधित्व में उभयचर प्रजातियों और उसके सदस्यों का प्रतिनिधित्व करना है, तो हम क्या करेंगे हम एक वर्ग 'एम्फ़िबियन' विकसित करेंगे जिसमें गुण या व्यवहार है जो सामान्य रूप से उभयचरों के लिए सामान्य है।
इस तरह हमारे द्वारा वर्णित प्रत्येक उभयचर जानवर के लिए सामान्य गुणों और व्यवहार की नकल करने की आवश्यकता नहीं है। हम सीधे उभयचर जानवरों के लिए एक कक्षा बनाएंगे और नीचे दिखाए गए अनुसार एम्फ़िबियन वर्ग से विरासत में मिला है।
तो 'वंशानुक्रम' सुविधा के पीछे एक सामान्य विचार यह है कि हम पहले से मौजूद वर्गों से विरासत में नई कक्षाएं बना सकते हैं। पहले से मौजूद वर्गों से विरासत में, हमें इन वर्गों के गुणों और व्यवहार का उपयोग करने के लिए मिलता है। इसके अलावा, हम अपने नए वर्ग में अधिक गुण और / या व्यवहार जोड़ सकते हैं।
वंशानुक्रम सुविधा में 'दिखाया गया है' अभिभावक-बच्चे जावा में कनेक्शन या संबंध। जिस वर्ग से नई कक्षा विरासत में मिली है उसे 'कहा जाता है' जनक वर्ग 'जबकि नई कक्षा को' कहा जाता है बाल वर्ग ”।
इनहेरिटेंस मुख्य रूप से उपयोग किया जाता है:
- के लिये ओवरराइड करने की विधि ताकि हम हासिल कर सकें रनटाइम बहुरूपता ।
- सेवा कोड का पुन: उपयोग करें । पहले से मौजूद वर्गों से विरासत में, हम सुनिश्चित करते हैं पुनर्प्रयोग कोड का।
सामान्य शब्दावली इनहेरिटेंस में प्रयुक्त
- पुन: प्रयोज्यता: वह तंत्र जिसके द्वारा नई कक्षाएं किसी मौजूदा वर्ग के क्षेत्रों या गुणों और विधियों का पुन: उपयोग करती हैं।
- वर्ग: एक वर्ग वस्तुओं का एक संग्रह है जिसमें सामान्य गुण होते हैं। एक क्लास को टेम्प्लेट या ऑब्जेक्ट के लिए ब्लू-प्रिंट के रूप में देखा जा सकता है।
- उप वर्ग / बाल वर्ग: एक वर्ग जो दूसरे वर्ग से विरासत में मिला है वह एक उपवर्ग या एक बाल वर्ग या एक व्युत्पन्न वर्ग है।
- सुपर क्लास / पैरेंट क्लास: एक वर्ग जो गुण और विधियों को प्राप्त करने के लिए अन्य वर्ग द्वारा विरासत में मिला है, उसे मूल वर्ग या सुपरक्लास या बेस क्लास कहा जाता है।
निम्नलिखित विरासत पदानुक्रम एक सुपरक्लास और उपवर्ग को दर्शाने वाला एक उदाहरण है।
हमारे पास OrganisationName और EmployeeId के साथ एक कर्मचारी वर्ग है। इसमें कर्मचारी के नाम, विभाग और अन्य कर्मचारी विवरण जैसे अन्य फ़ील्ड भी हो सकते हैं।
फिर हम क्षेत्र के वेतन और भत्तों के साथ 'SoftwareDeveloper' नामक एक अन्य वर्ग प्राप्त करते हैं। सॉफ्टवेयर Softwareeveloper वर्ग कर्मचारी वर्ग से विरासत में मिला है, और इसलिए यह कर्मचारी वर्ग के गुणों को भी प्राप्त करता है।
जैसा कि ऊपर चित्र में दिखाया गया है, यहाँ कर्मचारी वर्ग एक सुपर या बेस क्लास है और SoftwareDeveloper एक उपवर्ग या व्युत्पन्न वर्ग है।
'संकेतशब्द विस्तृत जावा में
जावा में, क्लास को इनहेरिट करने के लिए 'फैली हुई' कीवर्ड का उपयोग किया जाता है।
जावा वंशानुक्रम का सामान्य सिंटैक्स नीचे दिया गया है:
class SubClass extends SuperClass { //subclass methods and fields }
जैसा कि ऊपर दिखाया गया है, वर्ग घोषणा सिंटैक्स में क्लासनाम के बाद ends एक्सटेंड्स ’कीवर्ड दिखाई देता है।
कीवर्ड creating विस्तार से बताता है कि हम एक नया वर्ग ass सबक्लास ’बना रहे हैं जो and सुपरक्लास’ से गुण और व्यवहार का वारिस करेगा। दूसरे शब्दों में, विस्तारित कीवर्ड इंगित करता है कि हम SuperClass की मौजूदा कार्यक्षमता पर एक नया वर्ग SubClass बना रहे हैं।
The एक्सटेंड्स ’कीवर्ड के साथ लागू की गई विरासत श्रेणी की विरासत है। अगले ट्यूटोरियल में, हम एक अन्य कीवर्ड 'इम्प्लीमेंट्स' पर चर्चा करेंगे जिसके उपयोग से हम इंटरफेस को विरासत में दे सकते हैं।
कर्मचारी-सॉफ्टवेयरविज्ञानी वर्ग का एक उदाहरण जो हमने ऊपर समझाया है, उसे निम्न रूप में दर्शाया जा सकता है:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
आईएस-ए और एचएएस-ए संबंध
निम्नलिखित वर्ग संरचना पर विचार करें:
class Mammal{ } class Cow extends Mammal{ }
तो हम उपरोक्त संरचना की व्याख्या कैसे कर सकते हैं? जैसा कि काउल वर्ग स्तनपायी का विस्तार या विरासत करता है, हम कह सकते हैं “गाय एक है स्तनपायी ”या“ गाय ” एक तरह का है सस्तन प्राणी'। इसलिए जब भी हम ऐसे संबंधों को व्यक्त करते हैं, तो वह विशेष संबंध 'IS_A' संबंध होता है।
उपरोक्त संरचना में, हमने इस तथ्य को व्यक्त करने के लिए वंशानुक्रम पदानुक्रम का उपयोग किया कि एक प्रकार दूसरे प्रकार का है। इसलिए उपरोक्त संरचना में, हमने गाय और स्तनपायी के बीच संबंधों को इंगित करने के लिए एक विरासत का उपयोग किया।
इसी प्रकार, हम कुछ और IS-A संबंधों को इस प्रकार व्यक्त कर सकते हैं:
ऊपर दिए गए रिश्तों के कुछ सामान्य उदाहरण हैं जिन्हें हम जावा में विरासत का उपयोग करके व्यक्त कर सकते हैं।
सामान्य तौर पर, आईएस-ए प्रकार के संबंधों को विरासत का उपयोग करके व्यक्त किया जा सकता है।
अब नीचे दिए गए उदाहरण को देखते हैं:
उपरोक्त आरेख में, हम देखते हैं कि एक वाहन को दो भागों अर्थात् इंजन और ब्रेक के लिए दिखाया गया है। तो हम इस परिदृश्य को कैसे शब्दों में रख सकते हैं?
हम कह सकते हैं कि “एक वाहन शामिल एक इंजन और एक वाहन शामिल एक ब्रेक ”।
इसलिए हम यहां जो व्यक्त कर रहे हैं, वह 'आईएस-ए' संबंध नहीं है, बल्कि एक संबंध है जिसमें हम एक वस्तु को किसी अन्य वस्तु के हिस्से के रूप में निर्दिष्ट करते हैं।
वीडियो फ़ाइलों को परिवर्तित करने के लिए सबसे अच्छा कार्यक्रम
उपरोक्त उदाहरण में, एक इंजन ए है का हिस्सा वाहन। यह एक 'नहीं है' एक प्रकार का “वाहन। यह है ' एक “या जावा में संबंध या रचना संबंध। जावा में एक संबंध को कक्षा के एक सदस्य के रूप में शामिल करके व्यक्त किया जाता है।
इसलिए यदि हम ऊपर एक ही वाहन उदाहरण का अनुसरण करते हैं, तो हम इसे नीचे के रूप में व्यक्त कर सकते हैं:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
तो एक वाहन में एक इंजन और एक ब्रेक होता है। उपरोक्त तरीके से रिश्ते को व्यक्त करने से, हमें इंजन या ब्रेक के आंतरिक कार्यान्वयन में कोई दिलचस्पी नहीं है। वाहन वर्ग इंजन और ब्रेक कक्षाओं को बताएगा कि क्या जरूरत है और वे कक्षाएं इसे प्रदान करेंगे।
आईएस-ए रिश्ते की तरह, एचएएस-ए संबंध कोड का पुन: उपयोग करने में भी उपयोगी है।
इस ट्यूटोरियल में, हम इनहेरिटेंस (IS-A) के बारे में विस्तार से चर्चा करेंगे और अगले ट्यूटोरियल में, हम कन्टैंट या कम्पोज़िशन (HAS-A) पर चर्चा करेंगे।
जावा वंशानुक्रम उदाहरण
उत्तराधिकार प्रदर्शित करने के लिए जावा में एक सरल उदाहरण लागू करें।
//example class demonstrating Inheritance in Java class BaseClass { public void display() { System.out.println('BaseClass::Display'); } } //create a new class from BaseClass class DerivedClass extends BaseClass { public void print() { System.out.println('DerivedClass::print'); } } class Main { public static void main(String() args) { //create an object of DerivedClass DerivedClass d1 = new DerivedClass(); d1.display(); //call BaseClass method d1.print(); //call DerivedClass method } }
आउटपुट:
उपरोक्त कार्यक्रम विरासत का एक सरल उदाहरण दिखाता है। एक विधि के साथ एक BaseClass घोषित किया जाता है। इसके बाद बेसक्लास का विस्तार करने वाला एक और वर्ग डेरीवेडक्लास घोषित किया जाता है। इस वर्ग की भी एक विधि है।
कार्यक्रम की मुख्य विधि में, हम एक DerivedClass ऑब्जेक्ट बनाते हैं और इस ऑब्जेक्ट का उपयोग करके हम बेसक्लास के साथ-साथ DerivedClass विधि भी कहते हैं।
आउटपुट दोनों विधियों द्वारा मुद्रित संदेशों को दिखाता है। जैसा कि DerivedClass BaseClass का विस्तार करता है और BaseClass विधि सार्वजनिक होती है, यह DerivedClass को दिखाई देती है।
जावा में ‘सुपर’ कीवर्ड
इनहेरिटेंस में, हम सुपरक्लास या पैरेंट क्लास और चाइल्ड क्लास से निपटते हैं। यदि हमें चर, विधियों, या निर्माणकर्ताओं सहित सुपरक्लास सदस्यों के बीच में पहुँचना है, तो हमें कुछ तंत्र रखने की आवश्यकता है। आधार वर्ग के सदस्यों तक पहुँचने का यह तंत्र जावा में 'सुपर' कीवर्ड का उपयोग करके प्रदान किया गया है।
तो हम जावा में किस परिदृश्य में 'सुपर' कीवर्ड का उपयोग करते हैं?
नीचे सूचीबद्ध ऐसे परिदृश्य हैं जिनमें ed सुपर ’कीवर्ड मददगार हो सकता है।
- जब सुपर / बेस क्लास और सब / व्युत्पन्न वर्ग के सदस्यों के लिए समान नाम होते हैं, और हम सुपरक्लास सदस्यों तक पहुंचना चाहते हैं तो हम सुपर कीवर्ड का उपयोग करते हैं।
- जब हम सुपरक्लास कंस्ट्रक्टर को उपवर्ग से एक्सेस करना चाहते हैं, तब हम सुपरक्लॉस कीवर्ड का उपयोग करने के लिए सुपर कीवर्ड का उपयोग करते हैं।
उपरोक्त आंकड़े में, हमने एक विरासत संरचना दिखाई है। आधार के साथ-साथ व्युत्पन्न वर्ग में, हमारे पास एक स्ट्रिंग चर myStr है। व्युत्पन्नक्लास में, हमारे पास एक प्रिंटस्टार () फ़ंक्शन है। इस विधि में, मैंने आधार वर्ग से myStr चर का उपयोग करने के लिए 'सुपर' कीवर्ड का उपयोग किया है।
आकृति में, हमने आधार वर्ग के सदस्य चर और व्युत्पन्न वर्ग चर की ओर इशारा करते हुए तीर दिखाए हैं।
अब विभिन्न सुपरक्लास सदस्यों तक पहुँचने के लिए सुपर कीवर्ड का उपयोग करने के प्रोग्रामिंग उदाहरण देखें।
(1) सुपरक्लास सदस्य चर पर पहुँचें
निम्नलिखित जावा प्रोग्राम बेस क्लास से चर तक पहुंचने के लिए एक 'सुपर' कीवर्ड के उपयोग को दर्शाता है।
class Baseclass { String myStr; } class Subclass extends Baseclass { String myStr; public void printdetails() //Baseclass and Subclass have variables with same name { super.myStr = 'Super'; //refers to parent class member myStr = 'Sub'; System.out.println('Superclass myStr :' + super.myStr+' and Subclass myStr:'+myStr); } } class Main{ public static void main(String() args) { Subclass cobj = new Subclass(); cobj. printdetails (); } }
आउटपुट:
उपरोक्त कार्यक्रम से पता चलता है कि कैसे व्युत्पन्न वर्ग से बेस क्लास के सदस्य चर का उपयोग किया जाता है जब सदस्य चर को आधार और साथ ही व्युत्पन्न वर्ग दोनों में समान नाम के साथ घोषित किया जाता है।
यहां, हमारे पास myStr वैरिएबल है जो बेस के साथ-साथ व्युत्पन्न वर्ग में घोषित किया गया है। विधि के सिद्धांतों में, हम बेस क्लास के myStr वेरिएबल को 'super.myStr' का उपयोग करते हुए संदर्भित करते हैं, जबकि व्युत्पन्न वर्ग वेरिएबल myStr को बिना किसी क्वालिफायर के सीधे एक्सेस किया जाता है।
# 2) सुपरक्लास विधि तक पहुँचें
अगला, हम देखेंगे कि बेस क्लास पद्धति को कैसे कॉल किया जाए जब बेस क्लास में विधि और व्युत्पन्न वर्ग में विधि समान नाम हों।
निम्नलिखित कार्यक्रम यह प्रदर्शित करता है।
class Parent { String myStr; public void print() //parent class method { myStr = 'Parent class myStr'; System.out.println(myStr); } } class Child extends Parent { String myStr; public void print() //child class method with same name as parent { super.print(); //call Parent class print() method myStr = 'Child class myStr'; System.out.println(myStr); } } class Main{ public static void main(String() args) { Child c_obj = new Child(); c_obj.print (); } }
आउटपुट:
# 3) सुपरक्लास कंस्ट्रक्टर एक्सेस करें
जब हम एक वर्ग को दूसरे से विरासत में लेते हैं, तो ध्यान दें कि निर्माणकर्ता को विरासत में नहीं मिला है।
यदि हम व्युत्पन्न वर्ग निर्माता को निष्पादित करने से पहले सुपरक्लास कंस्ट्रक्टरों से किसी भी निर्देश को निष्पादित करना चाहते हैं, तो हम ’सुपर’ कीवर्ड का उपयोग करके सुपरक्लास कंस्ट्रक्टर भी कह सकते हैं।
सुपरक्लास कंस्ट्रक्टर को कॉल करने के लिए हम मेथड कॉल का उपयोग करते हैं।
सुपर (पैरामीटर सूची…)
निम्न विधि जावा में सुपर कंस्ट्रक्टरों तक पहुंच का प्रदर्शन करती है।
class Parent { String myStr; public Parent(String name) //base class constructor { myStr = name; } } class Child extends Parent { String myStr; public Child(String name1, String name2) { super(name1); //call base class constructor and pass argument value this.myStr = name2; } public void printDetails() //print details of both constructors { System.out.println('From base class constructor: ' +super.myStr); System.out.println('From derived class constructor: ' + myStr); } } class Main{ public static void main(String() args) { Child cobj = new Child('Super constructor string','Child constructor string'); cobj.printDetails(); } }
आउटपुट:
जैसा कि हम उपरोक्त कार्यक्रम से देख सकते हैं, हमने व्युत्पन्न वर्ग निर्माता से सुपरक्लास के निर्माता को बुलाया है। ध्यान दें कि सम्मेलन द्वारा, जब भी हम सुपरक्लास कंस्ट्रक्टर को एक्सेस करना चाहते हैं, तो यह व्युत्पन्न वर्ग के कंस्ट्रक्टर में पहला स्टेटमेंट होना चाहिए।
जैसा कि बेस क्लास में एक पैरामीटर कंस्ट्रक्टर है, हम कंस्ट्रक्टर को कॉल करते समय सुपर कॉल के लिए उपयुक्त पैरामीटर भी पास करते हैं।
यदि ऊपर के रूप में सुपर कंस्ट्रक्टर को कोई स्पष्ट कॉल नहीं किया गया है, तो कंपाइलर सुपर () को स्वचालित रूप से एक निहित कॉल जोड़ता है। लेकिन ध्यान दें कि यह सुपरक्लास के डिफ़ॉल्ट निर्माता के लिए एक कॉल होगा।
बार बार पूछे जाने वाले प्रश्न
Q # 1) जावा में इनहेरिटेंस क्या है?
उत्तर: एक प्रक्रिया जिसके द्वारा एक वर्ग दूसरे वर्ग के गुणों और व्यवहार को प्राप्त करता है, विरासत कहलाता है। जावा में, ‘एक्सटेंड्स’ कीवर्ड का उपयोग करके एक वर्ग को दूसरे वर्ग से विरासत में मिला है।
वंशानुक्रम कोड की पुन: प्रयोज्यता को बढ़ावा देता है जैसे कि हम विरासत में प्राप्त कर सकते हैं और डुप्लिकेट कोड लिखने के बिना विरासत में प्राप्त वर्ग के पहले से मौजूद गुणों और व्यवहार का उपयोग कर सकते हैं।
Q # 2) जावा में इनहेरिटेंस का उपयोग क्यों किया जाता है?
उत्तर: इनहेरिटेंस का उपयोग मुख्य रूप से अनुप्रयोग की पुन: प्रयोज्य में सुधार के लिए किया जाता है। विरासत का उपयोग करके हम अपने आवेदन में तैयार कक्षाओं का उपयोग कर सकते हैं। अगर हमारे पास कार्यक्षमता तैयार है तो हमें अपना कोड नहीं लिखना होगा।
वंशानुक्रम का दूसरा उपयोग विधि अधिभावी में है। रनटाइम बहुरूपता को लागू करने के लिए हम विरासत का उपयोग करते हैं।
Q # 3) वंशानुक्रम के क्या लाभ हैं?
उत्तर: पुन: प्रयोज्य विरासत का प्रमुख लाभ है। विरासत के माध्यम से कोड साझा करने से कोड की बेहतर पठनीयता और बेहतर संगठन का भी परिणाम होता है।
हम वंशानुक्रम का उपयोग करते हुए विधि के माध्यम से रनटाइम बहुरूपता भी प्राप्त कर सकते हैं।
विंडोज़ 10 में jnlp फ़ाइल कैसे खोलें
Q # 4) इनहेरिटेंस की विशेषताएं क्या हैं?
उत्तर: पुरानी पीढ़ी से प्राप्त किसी भी विशेषता या विशेषता को विरासत के माध्यम से किया जाता है। उदाहरण के लिए, कई परिवारों में होने वाला प्रकाश-नेत्र गुण वंशानुक्रम का एक उदाहरण है।
एक प्रोग्रामिंग दृष्टिकोण से, वंशानुक्रम पुन: प्रयोज्य और विधि अधिभावी की सुविधा प्रदान करता है।
Q # 5) क्या सुपर () आवश्यक है?
उत्तर: नहीं, क्योंकि अगर हम सुपर () को कॉल नहीं करते हैं, तो संकलक इसे हमारे लिए निहित करता है। लेकिन फिर सुपर () का अंतर्निहित इन्वोकेशन डिफॉल्ट बेस क्लास कंस्ट्रक्टर है। इसलिए यदि हमें बेस क्लास से एक पैरामीटराइज्ड कंस्ट्रक्टर की आवश्यकता है, तो हमें इसे स्पष्ट रूप से कॉल करना चाहिए।
निष्कर्ष
इस ट्यूटोरियल में, हमने जावा में इनहेरिटेंस की अवधारणा पेश की। वंशानुक्रम एक वर्ग के गुणों और व्यवहार को दूसरी कक्षा में प्राप्त करने की प्रक्रिया है। हमने मूल परिभाषा और शब्दावली की चर्चा की जिसका उपयोग हम यहाँ विरासत में करते हैं।
हमने जावा में ई-ए और हस-ए रिश्तों पर भी चर्चा की है। एक रिश्ते को लागू करने के लिए विरासत का उपयोग किया जाता है।
फिर हमने जावा में ends एक्सटेंड्स ’और keywords सुपर’ कीवर्ड्स पर चर्चा की जिनका उपयोग विरासत के संबंध में किया जाता है। विरासत को लागू करने के लिए विस्तार का उपयोग किया जाता है। सुपर कीवर्ड का उपयोग व्युत्पन्न वर्ग से बेस क्लास कंस्ट्रक्टर, विधि या चर को संदर्भित करने के लिए किया जाता है।
=> यहाँ बिल्कुल सही जावा प्रशिक्षण गाइड देखें।
अनुशंसित पाठ
- उदाहरण के साथ जावा स्कैनर क्लास ट्यूटोरियल
- जावा वेक्टर क्या है | उदाहरणों के साथ जावा वेक्टर क्लास ट्यूटोरियल
- जावा Enum: जावा गणन ट्यूटोरियल उदाहरण के साथ
- जावा स्ट्रिंग लंबाई () उदाहरणों के साथ विधि
- जावा फ्लोट ट्यूटोरियल प्रोग्रामिंग उदाहरण के साथ
- C ++ में वंशानुक्रम
- C ++ में इनहेरिटेंस के प्रकार
- अजगर OOPs अवधारणाओं (पायथन क्लासेस, ऑब्जेक्ट्स और इनहेरिटेंस)