जावा में, एक आंतरिक वर्ग बस एक वर्ग है जिसे किसी अन्य वर्ग या इंटरफ़ेस के अंदर परिभाषित किया गया है। आंतरिक कक्षाएं संबंधित कोड को एक साथ रखने में मदद करती हैं, जिससे प्रोग्राम को पढ़ना और समझना आसान हो जाता है। वे आंतरिक कक्षाओं को बाहरी कक्षा के निजी सदस्यों तक पहुंचने की भी अनुमति देते हैं, जिससे कोड को व्यवस्थित करना और संरक्षित करना आसान हो जाता है। इस लेख में, हम जावा में आंतरिक और नेस्टेड कक्षाओं की मूल बातें तलाशेंगे।
जावा की आंतरिक कक्षाओं को उन परिदृश्यों को संभालने के लिए पेश किया गया था जहां कक्षाओं का एक सेट तार्किक रूप से एक साथ होता है लेकिन उन्हें अपनी युक्त कक्षा के बाहर पहुंच योग्य होने की आवश्यकता नहीं होती है। बाहरी वर्ग के भीतर आंतरिक वर्गों को परिभाषित करके, जावा डेवलपर्स कोड पठनीयता में सुधार कर सकते हैं, मॉड्यूलरिटी बढ़ा सकते हैं, और बाहरी वर्ग के निजी सदस्यों तक पहुंच सकते हैं, जिससे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में अधिक संक्षिप्त, वास्तविक दुनिया जैसी संरचना प्राप्त हो सकती है।
आंतरिक कक्षाओं का उपयोग करने के लाभ:
जावा नेस्टेड कक्षाओं को दो व्यापक श्रेणियों में विभाजित करता है: गैर-स्थैतिक नेस्टेड कक्षाएं (आमतौर पर आंतरिक कक्षाओं के रूप में संदर्भित) और स्थिर नेस्टेड कक्षाएं। इन श्रेणियों के भीतर, चार अलग-अलग प्रकार की आंतरिक कक्षाएं उपलब्ध हैं, प्रत्येक अद्वितीय विशेषताओं के साथ:
आइए उनके अंतर और विशिष्ट उपयोग के मामलों को समझने के लिए उदाहरणों के साथ प्रत्येक प्रकार का पता लगाएं।
ए सदस्य आंतरिक वर्ग एक गैर स्थैतिक वर्ग है जो सीधे बाहरी वर्ग के भीतर परिभाषित होता है। इस प्रकार की आंतरिक कक्षा निजी सहित बाहरी कक्षा के सभी सदस्यों तक पहुंच सकती है। यह तब उपयोगी होता है जब हम किसी ऐसी कार्यक्षमता को संपुटित करना चाहते हैं जो सीधे बाहरी वर्ग से संबंधित हो लेकिन उसे उजागर करने की आवश्यकता नहीं है।
एक सदस्य आंतरिक वर्ग का उदाहरण:
public class OuterClass { private int outerVar = 100; // Member inner class public class InnerClass { public void display() { System.out.println("Outer variable: " outerVar); } } public static void main(String[] args) { OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass(); inner.display(); } }
आउटपुट:
Outer variable: 100
ए विधि स्थानीय आंतरिक वर्ग को बाहरी वर्ग की एक विधि के भीतर परिभाषित किया गया है। यह वर्ग केवल उस विधि के भीतर ही पहुंच योग्य है जहां इसे परिभाषित किया गया है। इसका उपयोग आमतौर पर तब किया जाता है जब किसी विशिष्ट विधि के भीतर किसी विशेष कार्यक्षमता की आवश्यकता होती है।
एक विधि स्थानीय आंतरिक वर्ग का उदाहरण:
public class OuterClass { public void display() { class InnerClass { public void print() { System.out.println("Method Local Inner Class"); } } InnerClass inner = new InnerClass(); inner.print(); } public static void main(String[] args) { OuterClass outer = new OuterClass(); outer.display(); } }
आउटपुट:
Method Local Inner Class
ए स्थिर नेस्टेड वर्ग आंतरिक वर्ग से अलग व्यवहार करता है क्योंकि इसमें बाहरी वर्ग के उदाहरण का संदर्भ नहीं होता है। यह वर्ग केवल बाहरी वर्ग के स्थिर सदस्यों तक पहुंच सकता है और अक्सर इसका उपयोग तब किया जाता है जब नेस्टेड वर्ग की कार्यक्षमता बाहरी वर्ग से निकटता से संबंधित होती है लेकिन इसके उदाहरण की आवश्यकता नहीं होती है।
स्टेटिक नेस्टेड क्लास का उदाहरण:
public class OuterClass { private static int staticVar = 10; // Static nested class static class StaticNestedClass { public void display() { System.out.println("Static variable: " staticVar); } } public static void main(String[] args) { OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass(); nested.display(); } }
आउटपुट:
Static variable: 10
एक अनाम आंतरिक वर्ग एक विशिष्ट नाम के बिना आंतरिक वर्ग का एक प्रकार है। इस वर्ग का उपयोग तब किया जाता है जब किसी विधि को तुरंत ओवरराइड करने या लागू करने की आवश्यकता होती है, अक्सर इंटरफ़ेस या अमूर्त वर्गों के साथ।
एक अज्ञात आंतरिक वर्ग का उदाहरण:
public class Test { public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { System.out.println("Anonymous Inner Class"); } }; new Thread(r).start(); } }
आउटपुट:
Anonymous Inner Class
विशेषता | आंतरिक वर्ग | स्टेटिक नेस्टेड क्लास |
---|---|---|
संगठन | बाहरी वर्ग के एक उदाहरण से संबद्ध | बाहरी वर्ग के उदाहरण से संबद्ध नहीं |
बाहरी वर्ग के सदस्यों तक पहुंच | निजी सहित सभी सदस्यों तक पहुंच सकते हैं | केवल स्थिर सदस्यों तक पहुंच सकते हैं |
उपयोग | इवेंट हैंडलिंग और एनकैप्सुलेशन के लिए उपयोगी | उदाहरण-विशिष्ट डेटा तक पहुंच के बिना बाहरी वर्ग से संबंधित उपयोगिता वर्गों के लिए उपयोगी |
बढ़ी हुई जटिलता: आंतरिक कक्षाएं कोड को पढ़ना कठिन बना सकती हैं, खासकर जब आंतरिक कक्षाओं की कई परतें हों। यह अतिरिक्त जटिलता उन डेवलपर्स को भ्रमित कर सकती है जो कोड संरचना से परिचित नहीं हैं।
मेमोरी प्रबंधन: आंतरिक कक्षाएं बाहरी कक्षा उदाहरण का संदर्भ रखती हैं। इससे मेमोरी का उपयोग बढ़ सकता है और यदि इनर क्लास इंस्टेंस का उपयोग दीर्घकालिक संचालन के लिए किया जाता है, खासकर एंड्रॉइड विकास में, तो मेमोरी लीक हो सकती है।
कठिन परीक्षण और डिबगिंग: चूंकि आंतरिक कक्षाएं अपने बाहरी वर्ग से मजबूती से जुड़ी हुई हैं, इसलिए परीक्षण और डिबगिंग अधिक चुनौतीपूर्ण हो सकती है। आंतरिक वर्ग का कोड अक्सर बाहरी वर्ग के संदर्भ पर निर्भर करता है, जो पृथक परीक्षण को कठिन बना सकता है।
कम कोड पुन: प्रयोज्यता: आंतरिक कक्षाएं आम तौर पर कम पुन: प्रयोज्य होती हैं क्योंकि वे बाहरी कक्षा से मजबूती से जुड़ी होती हैं। किसी आंतरिक वर्ग को उसके इच्छित दायरे से बाहर पुन: उपयोग करने के लिए आमतौर पर महत्वपूर्ण संशोधन या पुनर्गठन की आवश्यकता होती है।
स्थैतिक प्रतिबंध: गैर-स्थैतिक आंतरिक कक्षाओं में स्थिर सदस्य या विधियाँ नहीं हो सकती हैं, जो कुछ स्थितियों में उनके लचीलेपन को सीमित करती हैं।
शीर्ष-स्तरीय वर्ग: एक आंतरिक वर्ग बनाने के बजाय, एक अलग शीर्ष-स्तरीय वर्ग को परिभाषित करें। यह तब उपयोगी होता है जब वर्ग को बाहरी वर्ग के निजी क्षेत्रों और विधियों तक सीधी पहुंच की आवश्यकता नहीं होती है। यह कोड पठनीयता और पुन: प्रयोज्यता में भी सुधार करता है।
स्टेटिक नेस्टेड क्लासेस: यदि आपको बाहरी क्लास के गैर-स्टैटिक सदस्यों तक पहुंचने के लिए आंतरिक क्लास की आवश्यकता नहीं है, तो आप स्टैटिक नेस्टेड क्लास का उपयोग कर सकते हैं। स्टेटिक नेस्टेड कक्षाएं बाहरी वर्ग के उदाहरण का संदर्भ नहीं रखती हैं, इसलिए वे अधिक मेमोरी-कुशल हैं।
कार्यात्मक इंटरफेस के साथ अज्ञात कक्षाएं: एकल-उपयोग कार्यान्वयन के लिए, विशेष रूप से एक विधि (कार्यात्मक इंटरफेस) वाले इंटरफेस के लिए, अज्ञात कक्षाओं या लैम्ब्डा अभिव्यक्तियों का उपयोग करें। ये आंतरिक कक्षाओं के हल्के विकल्प हैं और इन्हें इनलाइन उपयोग किया जा सकता है।
फ़ैक्टरी पैटर्न: यदि आपको क्लास इंस्टेंसेस तक नियंत्रित पहुंच की आवश्यकता है और आंतरिक कक्षाओं से बचना चाहते हैं, तो फ़ैक्टरी डिज़ाइन पैटर्न का उपयोग करने पर विचार करें। यह दृष्टिकोण कार्यान्वयन विवरण को उजागर किए बिना, कोड को मॉड्यूलर और रखरखाव योग्य बनाए रखते हुए ऑब्जेक्ट इंस्टेंस बनाने में मदद करता है।
विभिन्न प्रकार की आंतरिक कक्षाओं और उनके अद्वितीय अनुप्रयोगों को समझकर, आप अधिक मॉड्यूलर और रखरखाव योग्य जावा कोड लिख सकते हैं।
यदि आपको यह अवलोकन उपयोगी लगता है, तो अपनी प्रोग्रामिंग यात्रा को बढ़ावा देने के लिए उन्नत जावा विषयों, युक्तियों और सर्वोत्तम प्रथाओं पर अधिक पोस्ट के लिए इसका अनुसरण करना सुनिश्चित करें!
Happy Coding?
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3