इस ट्यूटोरियल में, हम उदाहरण के साथ जावा इनहेरिटेंस और इसके प्रकारों के बारे में जानेंगे।
वंशानुक्रम OOP की प्रमुख विशेषताओं में से एक है जो हमें एक मौजूदा वर्ग से एक नया वर्ग बनाने की अनुमति देता है।
जो नया वर्ग बनाया गया है, उसे उपवर्ग (बच्चे या व्युत्पन्न वर्ग) के रूप में जाना जाता है और मौजूदा वर्ग जहाँ से बच्चे की क्लास ली जाती है, सुपरक्लास (मूल या आधार वर्ग) के रूप में जाना जाता है ।
extends
कीवर्ड जावा में विरासत प्रदर्शन करने के लिए प्रयोग किया जाता है। उदाहरण के लिए,
class Animal ( // methods and fields ) // use of extends keyword // to perform inheritance class Dog extends Animal ( // methods and fields of Animal // methods and fields of Dog )
उपरोक्त उदाहरण में, डॉग क्लास को पशु वर्ग से विधियों और क्षेत्रों को विरासत में मिलाकर बनाया गया है।
यहाँ, डॉग उपवर्ग है और पशु सुपरक्लास है।
उदाहरण 1: जावा वंशानुक्रम
class Animal ( // field and method of the parent class String name; public void eat() ( System.out.println("I can eat"); ) ) // inherit from Animal class Dog extends Animal ( // new method in subclass public void display() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access field of superclass labrador.name = "Rohu"; labrador.display(); // call method of superclass // using object of subclass labrador.eat(); ) )
आउटपुट
मेरा नाम रोहू है मैं खा सकता हूं
उपरोक्त उदाहरण में, हमने सुपरक्लास एनिमल से एक उपवर्ग कुत्ता प्राप्त किया है। बयानों पर ध्यान दें,
labrador.name = "Rohu"; labrador.eat();
यहाँ, लैब्राडोर डॉग की एक वस्तु है। हालाँकि, नाम और eat()
जानवर वर्ग के सदस्य हैं।
चूंकि डॉग पशु से क्षेत्र और विधि प्राप्त करता है, इसलिए हम डॉग की वस्तु का उपयोग करके क्षेत्र और विधि तक पहुंचने में सक्षम हैं।

एक रिश्ता है
जावा में, वंशानुक्रम एक -एक संबंध है। यही है, हम वंशानुक्रम का उपयोग केवल तभी करते हैं जब दो वर्गों के बीच एक-एक संबंध होता है। उदाहरण के लिए,
- कार एक वाहन है
- संतरा एक फल है
- सर्जन एक डॉक्टर है
- कुत्ता एक जानवर है
यहाँ, कार को वाहन से विरासत में लिया जा सकता है , नारंगी फलों से विरासत में मिल सकता है , और इसी तरह।
जावा वंशानुक्रम में विधि अधिभावी
में उदाहरण 1 , हम उपवर्ग की वस्तु सुपर क्लास की विधि का उपयोग कर सकते हैं।
हालाँकि, यदि सुपरक्लास और उपवर्ग दोनों में समान विधि मौजूद है, तो क्या होगा?
इस स्थिति में, उपवर्ग में विधि सुपरक्लास में विधि को ओवरराइड करती है। इस अवधारणा को जावा में ओवरराइडिंग विधि के रूप में जाना जाता है।
उदाहरण 2: जावा वंशानुक्रम में अधिभावी विधि
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
आउटपुट
मैं कुत्ता खाना खाता हूं मैं भौंक सकता हूं
उपरोक्त उदाहरण में, eat()
विधि सुपरक्लास एनिमल और सबक्लास डॉग दोनों में मौजूद है।
यहां, हमने डॉग का ऑब्जेक्ट लैब्राडोर बनाया है।
अब जब हम eat()
ऑब्जेक्ट लैब्राडोर का उपयोग करके कॉल करते हैं, तो डॉग के अंदर की विधि को कहा जाता है। ऐसा इसलिए है क्योंकि व्युत्पन्न वर्ग के अंदर की विधि बेस क्लास के अंदर की विधि को ओवरराइड करती है।
इसे मेथड ओवरराइडिंग कहा जाता है। अधिक जानने के लिए, जावा मेथड ओवरराइडिंग पर जाएं।
नोट : हमने @Override
एनोटेशन का उपयोग कंपाइलर को यह बताने के लिए किया है कि हम एक विधि को ओवरराइड कर रहे हैं। हालांकि, एनोटेशन अनिवार्य नहीं है। अधिक जानने के लिए, जावा एनोटेशन पर जाएं।
जावा विरासत में सुपर कीवर्ड
पहले हमने देखा था कि उपवर्ग में एक ही विधि सुपरक्लास में विधि को ओवरराइड करती है।
ऐसी स्थिति में, super
कीवर्ड का उपयोग पैरेंट क्लास की विधि को चाइल्ड क्लास की विधि से कॉल करने के लिए किया जाता है।
उदाहरण 3: विरासत में सुपर कीवर्ड
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( // call method of superclass super.eat(); System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
आउटपुट
मैं खा सकता हूं मैं कुत्ते का खाना खाता हूं मैं भौंक सकता हूं
उपरोक्त उदाहरण में, eat()
विधि बेस क्लास एनिमल और व्युत्पन्न क्लास डॉग दोनों में मौजूद है। कथन पर ध्यान दें,
super.eat();
यहां, super
कीवर्ड का उपयोग eat()
सुपरक्लास में मौजूद विधि को कॉल करने के लिए किया जाता है ।
हम super
उपवर्ग के निर्माता से सुपरक्लास के निर्माता को कॉल करने के लिए कीवर्ड का भी उपयोग कर सकते हैं । अधिक जानने के लिए, जावा सुपर कीवर्ड पर जाएँ ।
इनहेरिटेंस में संरक्षित सदस्य
जावा में, यदि किसी वर्ग में protected
फ़ील्ड और विधियाँ शामिल हैं, तो ये फ़ील्ड और विधियाँ कक्षा के उपवर्ग से पहुँच योग्य हैं।
Example 4: protected Members in Inheritance
class Animal ( protected String name; protected void display() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void getInfo() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access protected field and method // using the object of subclass labrador.name = "Rocky"; labrador.display(); labrador.getInfo(); ) )
Output
I am an animal. My name is Rocky
In the above example, we have created a class named Animal. The class includes a protected field: name and a method: display()
.
We have inherited the Dog class inherits Animal. Notice the statement,
labrador.name = "Rocky"; labrador.display();
Here, we are able to access the protected field and method of the superclass using the labrador object of the subclass.
Why use inheritance?
- The most important use of inheritance in Java is code reusability. The code that is present in the parent class can be directly used by the child class.
- Method overriding is also known as runtime polymorphism. Hence, we can achieve Polymorphism in Java with the help of inheritance.
Types of inheritance
There are five types of inheritance.
1. Single Inheritance
एकल वंशानुक्रम में, एक एकल उपवर्ग एकल सुपरक्लास से निकलता है। उदाहरण के लिए,

2. मल्टीलेवल इनहेरिटेंस
बहुस्तरीय विरासत में, एक उपवर्ग एक सुपरक्लास से निकलता है और फिर वही उप-वर्ग दूसरे वर्ग के लिए सुपरक्लास के रूप में कार्य करता है। उदाहरण के लिए,

3. पदानुक्रमित वंशानुक्रम
पदानुक्रमित विरासत में, कई उपवर्ग एक सुपरक्लास से विस्तारित होते हैं। उदाहरण के लिए,

4. एकाधिक वंशानुक्रम
एकाधिक वंशानुक्रम में, एक एकल उपवर्ग कई सुपरक्लास से निकलता है। उदाहरण के लिए,

नोट : जावा कई उत्तराधिकार का समर्थन नहीं करता है। हालांकि, हम इंटरफेस का उपयोग करके कई विरासत प्राप्त कर सकते हैं। अधिक जानने के लिए, Java को कई वंशानुक्रम पर लागू करता है।
5. हाइब्रिड इनहेरिटेंस
हाइब्रिड इनहेरिटेंस दो या दो से अधिक प्रकार की विरासत का संयोजन है। उदाहरण के लिए,

यहां, हमने हाइब्रिड वंशानुक्रम बनाने के लिए पदानुक्रमित और एकाधिक वंशानुक्रम को संयोजित किया है।