हम इस ट्यूटोरियल में सीखने वाले है कि जावा इनर क्लासेज (Java Inner classes in Hindi) और हम इसे कैसे इस्तमाल कर सकते हैं?
Table of Contents
नेस्टेड क्लासेस (Nested Classes in Hindi)
जावा में विधियों की तरह, एक वर्ग के चर में भी इसके Member के रूप में एक अन्य वर्ग हो सकता है। जावा में एक वर्ग को दूसरे के भीतर लिखने की अनुमति है। भीतर लिखे गए वर्ग को nested classes कहा जाता है, और inner class को धारण करने वाले वर्ग को बाहरी वर्ग कहा जाता है।
Syntax
नेस्टेड क्लास लिखने के लिए निम्नलिखित सिंटैक्स है। यहाँ, वर्ग Outer_Demo बाहरी वर्ग है और Inner_Demo वर्ग nested classes है।
class Outer_Demo {
class Inner_Demo {
}
}
नेस्टेड क्लासेस को दो प्रकारों में बांटा गया है –
Non-static nested classes – ये एक वर्ग के गैर-स्थैतिक Member हैं।
Static nested classes – ये एक क्लास के स्टैटिक members होते हैं।
इनर क्लासेस (नॉन-स्टैटिक नेस्टेड क्लासेस)
जावा में आंतरिक कक्षाएं एक सुरक्षा तंत्र हैं। हम जानते हैं कि एक वर्ग को एक्सेस संशोधक निजी से संबद्ध नहीं किया जा सकता है, लेकिन यदि हमारे पास अन्य वर्ग के Member के रूप में वर्ग है, तो inner class को निजी बनाया जा सकता है। और इसका उपयोग किसी वर्ग के निजी Member तक पहुँचने के लिए भी किया जाता है।
आप उन्हें कैसे और कहाँ परिभाषित करते हैं, इसके आधार पर inner class तीन प्रकार के होते हैं। वे हैं –
- Inner Class
- Method-local Inner Class
- Anonymous Inner Class
Inner Class
इनर क्लास बनाना काफी सरल है। आपको बस कक्षा के भीतर कक्षा लिखने की जरूरत है। एक वर्ग के विपरीत, एक inner class निजी हो सकता है और एक बार जब आप एक inner class को निजी घोषित कर देते हैं, तो उसे कक्षा के बाहर किसी वस्तु से एक्सेस नहीं किया जा सकता है।
निम्नलिखित एक inner class बनाने और इसे एक्सेस करने का कार्यक्रम है। दिए गए उदाहरण में, हम inner class को private बनाते हैं और एक method के माध्यम से class तक पहुँचते हैं।
Example
class Outer_Demo {
int num;
// inner class
private class Inner_Demo {
public void print() {
System.out.println(“This is an inner class”);
}
}
// within विधि से inner class तक पहुँचना
void display_Inner() {
Inner_Demo inner = new Inner_Demo();
inner.print();
}
}
public class My_class {
public static void main(String args[]) {
// Instantiating the outer class
Outer_Demo outer = new Outer_Demo();
// display_Inner() विधि तक पहुँचना।
outer.display_Inner();
}
}
यहाँ आप देख सकते हैं कि Outer_Demo बाहरी वर्ग है, Inner_Demo भीतरी वर्ग है, display_Inner () वह तरीका है जिसके अंदर हम inner class को इंस्टेंट कर रहे हैं, और यह विधि मुख्य विधि से लागू की जाती है।
यदि आप उपरोक्त प्रोग्राम को संकलित और Execution करते हैं, तो आपको निम्न परिणाम प्राप्त होंगे –
Output
This is an inner class.
Accessing the Private Members
जैसा कि पहले उल्लेख किया गया है, कक्षा के निजी Member तक पहुँचने के लिए आंतरिक कक्षाओं का भी उपयोग किया जाता है। मान लीजिए, एक वर्ग के पास उन्हें एक्सेस करने के लिए निजी Member हैं। इसमें एक inner class लिखें, निजी Member को inner class के भीतर एक विधि से लौटाएं, कहते हैं, getValue (), और अंत में किसी अन्य वर्ग से (जिससे आप निजी Member तक पहुंचना चाहते हैं) आंतरिक के getValue () विधि को कॉल करें कक्षा।
inner class को दृष्टांत देने के लिए, प्रारंभ में आपको बाहरी वर्ग को दृष्टांत देना होगा। इसके बाद, बाहरी वर्ग की वस्तु का उपयोग करके, निम्न तरीका है जिससे आप आंतरिक कक्षा को तुरंत चालू कर सकते हैं।
Outer_Demo outer = new Outer_Demo();
Outer_Demo.Inner_Demo inner = outer.new Inner_Demo();
निम्न कार्यक्रम दिखाता है कि inner class का उपयोग करके कक्षा के निजी Member तक कैसे पहुँचा जाए।
Example
class Outer_Demo {
// private variable of the outer class
private int num = 175;
// inner class
public class Inner_Demo {
public int getNum() {
System.out.println(“This is the getnum method of the inner class”);
return num;
}
}
}
public class My_class2 {
public static void main(String args[]) {
// outer class को इंस्टेंट करना
Outer_Demo outer = new Outer_Demo();
// Instantiating the inner class
Outer_Demo.Inner_Demo inner = outer.new Inner_Demo();
System.out.println(inner.getNum());
}
}
यदि आप उपरोक्त प्रोग्राम को संकलित और Execution करते हैं, तो आपको निम्न परिणाम प्राप्त होंगे –
Output
This is the getnum method of the inner class: 175
मेथड लोकल इनर क्लॉस (Method-local Inner Class in Hindi)
जावा में हम एक विधि के भीतर एक वर्ग लिख सकते हैं और यह एक स्थानीय प्रकार होगा। स्थानीय चर की तरह, inner class का दायरा विधि के भीतर प्रतिबंधित है।
एक विधि-स्थानीय inner class को केवल उस विधि के भीतर त्वरित किया जा सकता है जहाँ inner class परिभाषित किया गया है। निम्न प्रोग्राम दिखाता है कि विधि-स्थानीय inner class का उपयोग कैसे करें।
Example
public class Outerclass {
// instance method of the outer class
void my_Method() {
int num = 23;
// method-local inner class
class MethodInner_Demo {
public void print() {
System.out.println(“This is method inner class “+num);
}
} // end of inner class
// inner class तक पहुँचना
MethodInner_Demo inner = new MethodInner_Demo();
inner.print();
}
public static void main(String args[]) {
Outerclass outer = new Outerclass();
outer.my_Method();
}
}
यदि आप उपरोक्त प्रोग्राम को संकलित और Execution करते हैं, तो आपको निम्न परिणाम प्राप्त होंगे –
Output
This is method inner class 23
एनोनिमस इनर क्लास (Anonymous Inner Class in Hindi)
एक वर्ग नाम के बिना घोषित inner class को unknown inner class के रूप में जाना जाता है। unknown आंतरिक कक्षाओं के मामले में हम उन्हें एक ही समय में घोषित और तत्काल करते हैं। आम तौर पर, जब भी आपको किसी वर्ग या इंटरफ़ेस की विधि को override करने की आवश्यकता होती है, तब उनका उपयोग किया जाता है। एक अनाम inner class का सिंटैक्स इस प्रकार है –
Syntax
AnonymousInner an_inner = new AnonymousInner() {
public void my_method() {
……..
……..
}
};
निम्न प्रोग्राम दिखाता है कि अनाम inner class का उपयोग करके किसी वर्ग की विधि को कैसे override किया जाए।
Example
abstract class AnonymousInner {
public abstract void mymethod();
}
public class Outer_class {
public static void main(String args[]) {
AnonymousInner inner = new AnonymousInner() {
public void mymethod() {
System.out.println(“This is an example of anonymous inner class”);
}
};
inner.mymethod();
}
}
यदि आप उपरोक्त प्रोग्राम को संकलित और Execution करते हैं, तो आपको निम्न परिणाम प्राप्त होंगे –
Output
This is an example of anonymous inner class
उसी तरह, आप एक अनाम inner class का उपयोग करके कंक्रीट वर्ग के साथ-साथ इंटरफ़ेस के तरीकों को override कर सकते हैं।
Anonymous Inner Class as Argument
आम तौर पर, यदि कोई विधि एक इंटरफ़ेस एक abstract class या एक ठोस वर्ग की वस्तु को स्वीकार करती है, तो हम इंटरफ़ेस को लागू कर सकते हैं, abstract class का विस्तार कर सकते हैं और वस्तु को विधि में पास कर सकते हैं। यदि यह एक वर्ग है, तो हम इसे सीधे विधि में पारित कर सकते हैं।
लेकिन तीनों मामलों में, आप एक अनाम inner class को विधि में पास कर सकते हैं। यहाँ एक अनाम inner class को एक विधि तर्क के रूप में पारित करने का सिंटैक्स है –
obj.my_Method(new My_Class() {
public void Do() {
…..
…..
}
});
निम्न प्रोग्राम दिखाता है कि एक unknown inner class को विधि तर्क के रूप में कैसे पारित किया जाए।
Example
// interface
interface Message {
String greet();
}
public class My_class {
// method which accepts the object of interface Message
public void displayMessage(Message m) {
System.out.println(m.greet() +
“, This is an example of anonymous inner class as an argument”);
}
public static void main(String args[]) {
// Instantiating the class
My_class obj = new My_class();
// एक अज्ञात आंतरिक वर्ग को एक तर्क के रूप में पास करना
obj.displayMessage(new Message() {
public String greet() {
return “Hello”;
}
});
}
}
यदि आप उपरोक्त प्रोग्राम को संकलित और Execution करते हैं, तो यह आपको निम्न परिणाम देता है –
Output
Hello, This is an example of anonymous inner class as an argument
स्टेटिक नेस्टेड क्लास (Static Nested Class in Hindi)
एक स्थिर inner class एक nested classes है जो बाहरी वर्ग का static member है। अन्य static member का उपयोग करके बाहरी वर्ग को तत्काल किए बिना इसे एक्सेस किया जा सकता है। static member की तरह एक स्थिर nested classes के पास बाहरी वर्ग के उदाहरण चर और विधियों तक पहुंच नहीं होती है। स्टैटिक नेस्टेड क्लास का सिंटैक्स इस प्रकार है –
Syntax
class MyOuter {
static class Nested_Demo {
}
}
स्टैटिक नेस्टेड क्लास को इंस्टेंट करना, इनर क्लास को इंस्टेंट करने से थोड़ा अलग है। निम्न प्रोग्राम दिखाता है कि स्थिर nested classes का उपयोग कैसे करें।
Example
public class Outer {
static class Nested_Demo {
public void my_method() {
System.out.println(“This is my nested class”);
}
}
public static void main(String args[]) {
Outer.Nested_Demo nested = new Outer.Nested_Demo();
nested.my_method();
}
}
यदि आप उपरोक्त प्रोग्राम को संकलित और Execution करते हैं, तो आपको निम्न परिणाम प्राप्त होंगे –
Output
This is my nested class
हम उम्मीद करते है कि आपको “जावा इनर क्लासेज (Java Inner classes in Hindi)” से सम्बंधित जानकारी हिंदी में समझ में आयी होंगी यदि आपको बताई गई जानकारी अच्छी लगी हो तो अपने दोस्तों में ऐसे शेयर करे जिससे उनकी भी हेल्प हो सके धन्यवाद!