जावा इनर क्लासेस
जावा इनर क्लासेस
जावा में, कक्षाओं (कक्षा के भीतर एक वर्ग) को घोंसला बनाना भी संभव है। नेस्टेड कक्षाओं का उद्देश्य उन वर्गों को समूहबद्ध करना है जो एक साथ हैं, जो आपके कोड को अधिक पठनीय और रखरखाव योग्य बनाता है।
आंतरिक वर्ग तक पहुँचने के लिए, बाहरी वर्ग का एक ऑब्जेक्ट बनाएँ, और फिर आंतरिक वर्ग का एक ऑब्जेक्ट बनाएँ:
उदाहरण
class OuterClass {
int x = 10;
class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
// Outputs 15 (5 + 10)
निजी आंतरिक वर्ग
"नियमित" वर्ग के विपरीत, एक आंतरिक वर्ग private
या हो सकता है protected
। यदि आप बाहरी वस्तुओं को आंतरिक वर्ग तक नहीं पहुँचाना चाहते हैं, तो कक्षा को इस प्रकार घोषित करें private
:
उदाहरण
class OuterClass {
int x = 10;
private class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
यदि आप किसी बाहरी वर्ग से किसी निजी आंतरिक वर्ग तक पहुँचने का प्रयास करते हैं, तो एक त्रुटि उत्पन्न होती है:
Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();
^
स्टेटिक इनर क्लास
एक आंतरिक वर्ग भी हो सकता है static
, जिसका अर्थ है कि आप बाहरी वर्ग की वस्तु बनाए बिना इसे एक्सेस कर सकते हैं:
उदाहरण
class OuterClass {
int x = 10;
static class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass.InnerClass myInner = new OuterClass.InnerClass();
System.out.println(myInner.y);
}
}
// Outputs 5
नोट:static
विशेषताओं और विधियों की तरह , एक static
आंतरिक वर्ग के पास बाहरी वर्ग के सदस्यों तक पहुंच नहीं है।
आंतरिक कक्षा से बाहरी कक्षा तक पहुँचें
आंतरिक वर्गों का एक फायदा यह है कि वे बाहरी वर्ग की विशेषताओं और विधियों तक पहुँच सकते हैं:
उदाहरण
class OuterClass {
int x = 10;
class InnerClass {
public int myInnerMethod() {
return x;
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.myInnerMethod());
}
}
// Outputs 10