हम इस ट्यूटोरियल में सीखने वाले है कि जावा इनहेरिटेंस (Java Inheritance in Hindi) और हम इसे कैसे इस्तमाल कर सकते हैं? inheritance को उस प्रक्रिया के रूप में परिभाषित किया जा सकता है जहां एक वर्ग दूसरे के गुणों (विधियों और क्षेत्रों) को प्राप्त करता है। inheritance के उपयोग से सूचना को एक hierarchical order में प्रबंधनीय बनाया जाता है।
Table of Contents
वह वर्ग जो दूसरे के गुणों को प्राप्त करता है, उपवर्ग (derived class, child class) के रूप में जाना जाता है और जिस वर्ग के गुण विरासत में मिलते हैं, उसे superclass (base class, parent class) के रूप में जाना जाता है।
एक्सटेन्डस कीवर्ड (extends Keyword in Hindi)
विस्तार एक वर्ग के गुणों को प्राप्त करने के लिए उपयोग किया जाने वाला कीवर्ड है। एक्सटेंडेड कीवर्ड का सिंटैक्स निम्नलिखित है।
Syntax
class Super {
…..
…..
}
class Sub extends Super {
…..
…..
}
सैंपल कोड (Sample Code)
निम्नलिखित जावा inheritance को प्रदर्शित करने वाला एक उदाहरण है। इस उदाहरण में आप गणना और My_Calculation नामक दो वर्गों का Overview कर सकते हैं।
विस्तृत कीवर्ड का उपयोग करके, My_Calculation गणना वर्ग के addition() और Subtraction() विधियों को इनहेरिट करता है।
निम्न प्रोग्राम को My_Calculation.java नाम वाली फ़ाइल में कॉपी और पेस्ट करें
Example
class Calculation {
int z;
public void addition(int x, int y) {
z = x + y;
System.out.println(“The sum of the given numbers:”+z);
}
public void Subtraction(int x, int y) {
z = x – y;
System.out.println(“The difference between the given numbers:”+z);
}
}
public class My_Calculation extends Calculation {
public void multiplication(int x, int y) {
z = x * y;
System.out.println(“The product of the given numbers:”+z);
}
public static void main(String args[]) {
int a = 20, b = 10;
My_Calculation demo = new My_Calculation();
demo.addition(a, b);
demo.Subtraction(a, b);
demo.multiplication(a, b);
}
}
उपरोक्त कोड को संकलित करें और निष्पादित करें जैसा कि नीचे दिखाया गया है।
javac My_Calculation.java
java My_Calculation
प्रोग्राम को क्रियान्वित करने के बाद, यह निम्नलिखित परिणाम देगा –
Output
The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200
दिए गए प्रोग्राम में जब My_Calculation क्लास के लिए कोई ऑब्जेक्ट बनाया जाता है, तो उसके भीतर superclass की सामग्री की एक प्रति बनाई जाती है। इसीलिए, उपवर्ग के ऑब्जेक्ट का उपयोग करके आप superclass के सदस्यों तक पहुँच सकते हैं।
superclass रेफरेंस वेरिएबल सबक्लास ऑब्जेक्ट को होल्ड कर सकता है, लेकिन उस वेरिएबल का उपयोग करके आप केवल superclass के सदस्यों तक ही पहुंच सकते हैं, इसलिए दोनों वर्गों के सदस्यों तक पहुंचने के लिए यह सिफारिश की जाती है कि हमेशा सबक्लास के लिए रेफरेंस वेरिएबल बनाएं।
यदि आप उपरोक्त प्रोग्राम पर विचार करते हैं, तो आप नीचे दिए गए अनुसार क्लास को इंस्टैंट कर सकते हैं। लेकिन superclass संदर्भ variables (इस मामले में कैल) का उपयोग करके आप विधि गुणन () को कॉल नहीं कर सकते हैं, जो उपवर्ग My_Calculation से संबंधित है।
Calculation demo = new My_Calculation();
demo.addition(a, b);
demo.Subtraction(a, b);
नोट − एक सबक्लास अपने superclass से सभी सदस्यों (फ़ील्ड्स, मेथड्स और नेस्टेड क्लासेस) को इनहेरिट करता है। कंस्ट्रक्टर सदस्य नहीं हैं, इसलिए उन्हें उपवर्गों द्वारा विरासत में नहीं मिला है, लेकिन superclass के निर्माता को उपवर्ग से मंगवाया जा सकता है।
सुपर कीवर्ड (The super keyword in Hindi)
सुपर कीवर्ड इस कीवर्ड के समान है। निम्नलिखित परिदृश्य हैं जहां सुपर कीवर्ड का उपयोग किया जाता है।
- इसका उपयोग superclass के सदस्यों को उपवर्ग के सदस्यों से अलग करने के लिए किया जाता है, यदि उनके समान नाम हैं।
- इसका उपयोग उपवर्ग से superclass कंस्ट्रक्टर को आमंत्रित करने के लिए किया जाता है।
डिफ्रेंटिएटिंग मेंबर्स (Differentiating the Members in Hindi)
यदि एक वर्ग दूसरे वर्ग के गुणों को विरासत में प्राप्त कर रहा है। और यदि superclass के सदस्यों के नाम उप वर्ग के समान हैं, तो इन variablesों को अलग करने के लिए हम सुपर कीवर्ड का उपयोग करते हैं जैसा कि नीचे दिखाया गया है।
super.variable
super.method();
सैंपल कोड (Sample Code)
यह खंड आपको एक प्रोग्राम प्रदान करता है जो सुपर कीवर्ड के उपयोग को प्रदर्शित करता है।
दिए गए प्रोग्राम में, आपके पास Sub_class और Super_class नामक दो वर्ग हैं, दोनों में अलग-अलग कार्यान्वयन के साथ डिस्प्ले () नाम की एक विधि है, और अलग-अलग मानों के साथ संख्या नाम का एक variables है। हम दोनों वर्गों के प्रदर्शन () विधि को लागू कर रहे हैं और दोनों वर्गों के variables संख्या के मान को प्रिंट कर रहे हैं। यहाँ आप देख सकते हैं कि हमने सुपर कीवर्ड का उपयोग सुपर क्लास के सदस्यों को सबक्लास से अलग करने के लिए किया है।
Sub_class.java नाम की फ़ाइल में प्रोग्राम को कॉपी और पेस्ट करें।
Example
class Super_class {
int num = 20;
// display method of superclass
public void display() {
System.out.println(“This is the display method of superclass”);
}
}
public class Sub_class extends Super_class {
int num = 10;
// display method of sub class
public void display() {
System.out.println(“This is the display method of subclass”);
}
public void my_method() {
// Instantiating subclass
Sub_class sub = new Sub_class();
// Invoking the display() method of sub class
sub.display();
// Invoking the display() method of superclass
super.display();
// printing the value of variable num of subclass
System.out.println(“value of the variable named num in sub class:”+ sub.num);
// printing the value of variable num of superclass
System.out.println(“value of the variable named num in super class:”+ super.num);
}
public static void main(String args[]) {
Sub_class obj = new Sub_class();
obj.my_method();
}
}
निम्नलिखित सिंटैक्स का उपयोग करके उपरोक्त कोड को संकलित और निष्पादित करें।
javac Super_Demo
java Super
प्रोग्राम को क्रियान्वित करने पर, आपको निम्नलिखित परिणाम प्राप्त होंगे –
Output
This is the display method of subclass
This is the display method of superclass
value of the variable named num in sub class:10
value of the variable named num in super class:20
इनवॉकिंग सुपरक्लॉस कन्स्ट्रक्टर (Invoking Superclass Constructor in Hindi)
यदि एक वर्ग किसी अन्य वर्ग के गुणों को प्राप्त कर रहा है, तो उपवर्ग स्वचालित रूप से superclass के डिफ़ॉल्ट निर्माता को प्राप्त कर लेता है। लेकिन अगर आप superclass के parameterized कन्स्ट्रक्टर को कॉल करना चाहते हैं, तो आपको नीचे दिखाए गए अनुसार सुपर कीवर्ड का उपयोग करना होगा।
super(values);
सैंपल कोड (Sample Code)
इस खंड में दिया गया Program दर्शाता है कि superclass के पैरामीट्रिज्ड कंस्ट्रक्टर को आमंत्रित करने के लिए सुपर कीवर्ड का उपयोग कैसे करें। इस Program में एक superclass और एक उपवर्ग शामिल है, जहां superclass में एक parameterized कंस्ट्रक्टर होता है जो एक पूर्णांक मान को स्वीकार करता है, और हमने superclass के parameterized कंस्ट्रक्टर को आमंत्रित करने के लिए सुपर कीवर्ड का उपयोग किया।
निम्नलिखित प्रोग्राम को Subclass.java नाम की फ़ाइल में कॉपी और पेस्ट करें
Example
class Superclass {
int age;
Superclass(int age) {
this.age = age;
}
public void getAge() {
System.out.println(“The value of the variable named age in super class is: ” +age);
}
}
public class Subclass extends Superclass {
Subclass(int age) {
super(age);
}
public static void main(String args[]) {
Subclass s = new Subclass(24);
s.getAge();
}
}
निम्नलिखित सिंटैक्स का उपयोग करके उपरोक्त कोड को संकलित और निष्पादित करें।
javac Subclass
java Subclass
प्रोग्राम को क्रियान्वित करने पर, आपको निम्नलिखित परिणाम प्राप्त होंगे –
Output
The value of the variable named age in super class is: 24
आईएस-ए संबंध (IS-A Relationship in Hindi)
आईएस-ए कहने का एक तरीका है: यह वस्तु उस वस्तु का एक प्रकार है। आइए देखें कि इनहेरिटेंस प्राप्त करने के लिए एक्सटेंड कीवर्ड का उपयोग कैसे किया जाता है।
public class Animal {
}
public class Mammal extends Animal {
}
public class Reptile extends Animal {
}
public class Dog extends Mammal {
}
अब, उपरोक्त उदाहरण के आधार पर, वस्तु-उन्मुख शब्दों में, निम्नलिखित सत्य हैं –
- Animal स्तनपायी वर्ग का अधिवर्ग है।
- Animal सरीसृप वर्ग का superclass है।
- स्तनपायी और सरीसृप Animal वर्ग के उपवर्ग हैं।
- कुत्ता स्तनपायी और Animal दोनों वर्गों का उपवर्ग है।
अब, यदि हम IS-A संबंध पर विचार करें, तो हम कह सकते हैं –
- Mammal IS-A Animal
- Reptile IS-A Animal
- Dog IS-A Mammal
- Hence: Dog IS-A Animal as well
विस्तृत कीवर्ड के उपयोग के साथ, उपवर्ग superclass के निजी गुणों को छोड़कर superclass के सभी गुणों को प्राप्त करने में सक्षम होंगे।
हम आश्वस्त कर सकते हैं कि स्तनपायी वास्तव में एक Animal है, उदाहरण ऑपरेटर के उपयोग के साथ।
Example
class Animal {
}
class Mammal extends Animal {
}
class Reptile extends Animal {
}
public class Dog extends Mammal {
public static void main(String args[]) {
Animal a = new Animal();
Mammal m = new Mammal();
Dog d = new Dog();
System.out.println(m instanceof Animal);
System.out.println(d instanceof Mammal);
System.out.println(d instanceof Animal);
}
}
यह निम्नलिखित परिणाम देगा –
Output
true
true
true
चूँकि हमें विस्तृत कीवर्ड की अच्छी समझ है, आइए देखें कि IS-A संबंध प्राप्त करने के लिए इम्प्लीमेंट्स कीवर्ड का उपयोग कैसे किया जाता है।
आम तौर पर, इंटरफ़ेस के गुणों को प्राप्त करने के लिए कार्यान्वयन कीवर्ड का उपयोग कक्षाओं के साथ किया जाता है। एक वर्ग द्वारा इंटरफेस को कभी भी बढ़ाया नहीं जा सकता है।
Example
public interface Animal {
}
public class Mammal implements Animal {
}
public class Dog extends Mammal {
}
कीवर्ड का उदाहरण (The instanceof Keyword in Hindi)
आइए यह निर्धारित करने के लिए कि क्या स्तनपायी वास्तव में एक जानवर है, और कुत्ता वास्तव में एक जानवर है, यह जांचने के लिए ऑपरेटर के उदाहरण का उपयोग करें।
Example
interface Animal{}
class Mammal implements Animal{}
public class Dog extends Mammal {
public static void main(String args[]) {
Mammal m = new Mammal();
Dog d = new Dog();
System.out.println(m instanceof Animal);
System.out.println(d instanceof Mammal);
System.out.println(d instanceof Animal);
}
}
यह निम्नलिखित परिणाम देगा –
Output
true
true
true
HAS-A रिलेशनशिप (HAS-A relationship in Hindi)
ये रिश्ते मुख्य रूप से उपयोग पर आधारित होते हैं। यह निर्धारित करता है कि एक निश्चित वर्ग के पास एक निश्चित चीज है या नहीं। यह संबंध कोड के दोहराव के साथ-साथ बग को कम करने में मदद करता है।
आइए एक उदाहरण देखें –
Example
public class Vehicle{}
public class Speed{}
public class Van extends Vehicle {
private Speed sp;
}
इससे पता चलता है कि क्लास वैन की HAS-A स्पीड है। स्पीड के लिए एक अलग वर्ग होने से, हमें गति से संबंधित पूरे कोड को वैन क्लास के अंदर नहीं डालना पड़ता है, जिससे कई अनुप्रयोगों में स्पीड क्लास का पुन: उपयोग करना संभव हो जाता है।
ऑब्जेक्ट-ओरिएंटेड variables में यूजर्स को इस बात की चिंता करने की जरूरत नहीं है कि कौन सा ऑब्जेक्ट असली काम कर रहा है। इसे प्राप्त करने के लिए van class van class के उपयोगकर्ताओं से कार्यान्वयन विवरण hides है। तो, मूल रूप से क्या होता है कि उपयोगकर्ता van class को एक निश्चित action करने के लिए कहेंगे और van class या तो स्वयं कार्य करेगा या किसी अन्य वर्ग को action करने के लिए कहेगा।
टाइप ऑफ़ इनहेरिटेंस (Types of Inheritance in Hindi)
नीचे दिखाए गए अनुसार विरासत के विभिन्न प्रकार हैं।
याद रखने के लिए एक बहुत ही महत्वपूर्ण तथ्य यह है कि जावा multiple inheritance का समर्थन नहीं करता है। इसका मतलब है कि एक वर्ग एक से अधिक वर्ग का विस्तार नहीं कर सकता। इसलिए निम्नलिखित अवैध है –
Example
public class extends Animal, Mammal{}
हालाँकि, एक वर्ग एक या एक से अधिक इंटरफेस को लागू कर सकता है, जिसने जावा को कई inheritance की असंभवता से छुटकारा पाने में मदद की है।
हम उम्मीद करते है कि आपको “जावा इनहेरिटेंस (Java Inheritance in Hindi)” से सम्बंधित जानकारी हिंदी में समझ में आयी होंगी यदि आपको बताई गई जानकारी अच्छी लगी हो तो अपने दोस्तों में ऐसे शेयर करे जिससे उनकी भी हेल्प हो सके धन्यवाद!