Composition vs Inheritance In Hindi
जावा ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) कांसेप्ट में कंपोज़िशन और इनहेरिटेंस फीचर्स यूजर डिफाइन क्लास प्रोग्राम के मध्य एक सिंगल और मल्टीप्ल रिलेशनशिप को रिप्रेजेंट करने के लिए एक इम्पोर्टेन्ट कांसेप्ट हैं। जिससे की जावा प्रोग्रामिंग में कंपोज़िशन और इनहेरिटेंस फीचर्स प्रोग्राम सोर्स कोड को रिपेटेड मल्टीप्ल टाइम यूज़ करने और बड़े प्रोग्राम सोर्स कोड को स्माल मॉडुल में ब्रेक कर मॉड्यूलरिटी से सॉल्व करने में हेल्पफुल टेक्नीक हैं. लेकिन जावा प्रोग्रामिंग में कंपोज़िशन और इनहेरिटेंस का यूज़ अलग-अलग प्रोग्राम सिनेरियो या कंडीशन में किया जाता है. जिससे की जावा डेवलपर कंपोज़िशन और इनहेरिटेंस से फ्लेक्सिबल और मेंटेनेबल प्रोग्राम सोर्स कोड को क्रिएट कर सकते है. जिससे कि जावा यूजर इसके यूज़ को कैसे और कब यूज़ करना है, यह बेहतर तरीके से जान सके।

So, let’s better understand the main differences between composition and inheritance in Java.
Inheritance in Java.
जावा प्रोग्रामिंग में इनहेरिटेंस कांसेप्ट OOP में एक बिल्ट-इन फीचर्स है, जिसमे एक यूजर डिफाइन क्लास (जिसे मैन क्लास में डिक्लेअर सबक्लास या डिराइव्ड क्लास के रूप में जाना जाता है, अन्य क्लास (जिसे सुपरक्लास या बेस मैन क्लास के रूप में जाना जाता है) से उसके डिफ़ॉल्ट प्रॉपर्टीज़ और बिहेवियर (क्लास के फील्ड्स और कस्टम यूजर डिफाइन मेथड्स) को उसमे इनहेरिट कर उसके फीचर्स को यूज़ करती है। इनहेरिटेंस फीचर्स सबक्लास टू सुपरक्लास को एक ट्री स्ट्रक्चर में रिप्रेजेंट करता है. इसका मतलब है कि क्लास में डिफाइन सबक्लास मैन सुपरक्लास का एक यूजर डिफाइन टाइप है।
Example of the Java inheritance concept.
class Course {
public void select_course() {
System.out.println(“you can select your desire Course with select_course”);
}
}
class Java extends Course {
public void select_course() {
System.out.println(“Java select”);
}
}
public class Main {
public static void main(String[] args) {
Java java = new Java();
java.select_course(); // here we implement Java course select
}
}
In the Java inheritance concept example.
- यहाँ इनहेरिटेंस क्लास प्रोग्राम में Java, Course से select_course() बिहेवियर को इनहेरिट करता है।
- यहाँ इनहेरिटेंस कांसेप्ट में हम देखते हैं कि Java एक Course क्लास की सबक्लास है, क्योंकि यहाँ Java सबक्लास क्लास, Course सुपर क्लास को एक्सटेंड करती है।
Advantages of inheritance in Java programming.
- Code reusability – जावा यूजर डिफाइन क्लास प्रोग्राम में इनहेरिटेंस फीचर्स सबक्लास को सुपरक्लास प्रोग्राम के सोर्स कोड को रीयूज़ करने की परमिशन प्रोवाइड करता है, जोकि प्रोग्रामर डिफाइन सोर्स कोड के डुप्लीकेशन कांसेप्ट को अवॉयड करता है।
- Ease of maintenance – इनहेरिटेंस कांसेप्ट से सुपरक्लास में किए गए किसी भी प्रकार से मॉडिफिकेशन अपने आप सबक्लास में इनहेरिट हो जाते हैं।
- Extensibility – इनहेरिटेंस फीचर्स सुपरक्लास से सबक्लास क्रिएट कर एक नया क्लास बिहेवियर क्रिएट किया जा सकता है।
Disadvantages of inheritance in Java programming.
- Tight coupling – जावा क्लास में डिफाइन सबक्लास सुपरक्लास से स्ट्रॉन्ग्ली रूप में ग्रुप होते हैं, इसका अर्थ है कि सुपरक्लास में किसी भी प्रकार के मॉडिफिकेशन सबक्लास पे इमीडियेट इम्पैक्ट कर सकते हैं।
- Limited flexibility – याद रहे, एक यूजर क्रिएटेड सबक्लास सिर्फ़ एक सुपरक्लास पॉपर्टीज़ और फीचर्स से इनहेरिट होती है, जिससे की मल्टीप्ल क्लास से फ़ीचर्स को ग्रुप करना काम्प्लेक्स हो जाता है. जावा प्रोग्रामिंग किसी क्लास के लिए मल्टीपल इनहेरिटेंस फीचर्स को सपोर्ट नहीं करता है।
- Can have an inflexible hierarchy – जैसे-जैसे जावा क्लास प्रोग्राम में इनहेरिटेंस हायरार्की सुपरक्लास और सबक्लास फीचर्स बढ़ता रहता है, तब लार्ज मिलियन्स लाइन ऑफ़ प्रोग्राम सोर्स कोड को मॉडिफ़ाई और मेंटेन करना बहुत कम्प्लेक्स हो सकता है. स्पेशली, यदि आप डिटेल्ड नेस्टेड क्लास में सुपरक्लास से सबक्लास प्रोग्राम डिज़ाइन और डेवलप कर रहे हों।
Java Composition Features.
जावा क्लास प्रोग्रामिंग में कम्पोज़िशन फीचर्स एक डिज़ाइन मेथड या कांसेप्ट है, जिसमे यूजर डिफाइन एक क्लास किसी दूसरी क्लास के एक या ज़्यादा ऑब्जेक्ट से डेवलप होती है। जावा कंपोज़िशन फीचर्स का क्लास ऑब्जेक्ट की रिलेशनशिप को डिस्प्ले करने में किया जाता है। इसमें एक क्लास में दूसरी क्लास के रेफरेंस डिफाइन होते हैं, और यहाँ इन ग्रुप क्लास ऑब्जेक्ट को टास्क डेलीगेट करते हैं। इसे ज्यादातर “has-a” कांसेप्ट के रूप में जाना जाता है, क्योंकि यहाँ एक सुपर या अन्य क्लास में दूसरी अन्य क्लास के इंस्टेंस डिफाइन होते हैं।
Example of Java Composition Features.
class Exercise {
public void run() {
System.out.println(“Start exercise”);
}
}
class Fit {
private Exercise exercise; // here we defne Fit class has an Exercise class
public Fit() {
exercise = new Exercise(); // here we Composing Fit with Exercise
}
public void youwillfit() {
exercise.run(); // here we Delegating the run behavior to Exercise class
System.out.println(“You will be Fit now”);
}
}
public class Main {
public static void main(String[] args) {
Fit fit = new Fit();
fit.youwillfit();
}
}
Example of Java Composition Features.
- यहाँ Fit सबक्लास में एक Exercise सुपरक्लास है। Fit क्लास, Exercise क्लास से बनी है, और यह Exercise को रन करने का काम Exercise ऑब्जेक्ट क्रिएट कर देती है।
Advantages of Composition in Java.
- Loose Coupling – जावा क्लास में कम्पोज़िशन फीचर्स मौजूदा क्लास के अंदर ज़्यादा फ्लेक्सिबिलिटी और लूज़ कपलिंग फीचर्स को प्रोवाइड करता है। मौजूदा ग्रुप क्लास (जैसे, Exercise) में किसी भी प्रकार के किए गए मोड़ीफकेशन डायरेक्ट इन्क्लुड क्लास (Fit) पर कोई इम्पैक्ट नहीं करते हैं।
- Flexibility – यहाँ एक क्लास में कई दूसरी क्लास के इंस्टेंस क्रिएट हो सकते हैं, जिससे यूजर को क्लास डेवलप करने में अधिक फ्लेक्सिबिलिटी मिलती है। जैसे की, एक फिट क्लास में Exercise, ट्रांसफॉर्मेशन, हेल्थ आदि हो सकते हैं।
- Easy to modify – यदि किसी क्लास प्रोग्राम के डिफ़ॉल्ट बिहेवियर को मॉडिफाई करने की ज़रूरत है, तो जावा यूजर एक क्लास हायरार्की को अपडेट करने के बदले, कंपोज़्ड क्लास ऑब्जेक्ट्स को बदल या रिप्लेस कर सकते हैं. जैसे, किसी Exercise क्लास को दूसरे तरह के Exercise से जरूरत पड़ने पर मॉडिफाई कर सकते है।
- Reuse – यह मौजूदा क्लास कंपोज़िशन को इम्प्लीमेंट करती हैं, और जावा यूजर जरूरत पड़ने पर इन ऑब्जेक्ट्स को मल्टीप्ल टाइम यूज़ कर सकते हैं. जो क्लास प्रोग्राम में मल्टीप्ल क्लास के लिए यूज़फुल हैं।
Disadvantages of Composition in Java.
- More boilerplate code – जावा कंपोज़िशन फीचर्स से ज़्यादा प्रोग्राम सोर्स कोड क्रिएट हो सकते है, इस प्रोसेस में जावा यूजर को इसमें जुड़े हुए क्लास ऑब्जेक्ट्स को मैन्युअली क्रिएट और मैनेज करना होगा। और यह एक मैन्युअल काम्प्लेक्स प्रोसेस है।
- Object management – जावा यूजर को बड़े कोड बेस में कंपोज़्ड क्लास ऑब्जेक्ट्स की लाइफसाइकल को मैन्युअल मैनेज करना होगा। जिससे की बिगिनर जावा यूजर को कुछ पर्टिकुलर कंडीशन में कॉम्प्लेक्सिटी फेस हो सकती है।
