स्टेटिक नेस्टेड क्लासेस - 1

"तो, विषय संख्या दो स्थिर नेस्टेड कक्षाएं हैं। याद रखें कि गैर-स्थैतिक नेस्टेड कक्षाओं को आंतरिक कक्षाएं कहा जाता है ।

"नेस्टेड क्लास डिक्लेरेशन के संदर्भ में स्टेटिक शब्द का क्या अर्थ है, इसके बारे में अपना सिर लपेटें। आप क्या सोचते हैं?"

"यदि एक चर को स्थैतिक घोषित किया जाता है, तो चर की केवल एक प्रति मौजूद होती है। इसलिए, यदि एक नेस्टेड वर्ग स्थिर है, तो क्या इसका मतलब है कि आप उस वर्ग की केवल एक वस्तु बना सकते हैं?"

" स्थिर शब्द को यहाँ भ्रमित न होने दें । यह सच है कि यदि एक चर को स्थैतिक घोषित किया जाता है, तो चर की केवल एक प्रति होती है। लेकिन एक स्थिर नेस्टेड वर्ग इस संबंध में एक स्थिर विधि की तरह है। वर्ग घोषणा से पहले स्थिर शब्द इंगित करता है कि वर्ग अपने बाहरी वर्ग की वस्तुओं के संदर्भों को संग्रहीत नहीं करता है।"

"आह। सामान्य तरीके स्पष्ट रूप से एक वस्तु संदर्भ को संग्रहीत करते हैं, लेकिन स्थैतिक तरीके नहीं करते हैं। यह स्थैतिक वर्गों के साथ समान है, क्या मैं सही हूँ, ऐली?"

"बिल्कुल। आपकी त्वरित समझ सराहनीय है। स्थिर नेस्टेड कक्षाओं में उनके बाहरी वर्ग की वस्तुओं के छिपे हुए संदर्भ नहीं होते हैं।"

class Zoo
{
 private static int count = 7;
 private int mouseCount = 1;

 public static int getAnimalCount()
 {
  return count;
 }

 public int getMouseCount()
 {
  return mouseCount;
 }

 public static class Mouse
 {
  public Mouse()
  {
  }
   public int getTotalCount()
  {
   return count + mouseCount; // Compilation error.
  }
 }
}

"आइए इस उदाहरण की सावधानीपूर्वक समीक्षा करें।"

"स्थैतिक getAnimalCount विधि किस चर का उपयोग कर सकती है?"

"केवल स्थैतिक वाले। क्योंकि यह एक स्थिर विधि है।"

"क्या चर getMouseCount विधि का उपयोग कर सकते हैं?"

"स्थैतिक और गैर-स्थैतिक दोनों। इसमें एक चिड़ियाघर वस्तु के लिए एक छिपा हुआ संदर्भ (यह) है।"

"यह सही है। इसलिए, स्टैटिक नेस्टेड माउस क्लास, स्टैटिक मेथड की तरह, ज़ू क्लास के स्टैटिक वेरिएबल्स तक पहुँच सकता है, लेकिन यह नॉन-स्टैटिक वेरिएबल्स तक नहीं पहुँच सकता है।"

"हम सुरक्षित रूप से माउस ऑब्जेक्ट बना सकते हैं, भले ही एक भी ज़ू ऑब्जेक्ट नहीं बनाया गया हो। यहां बताया गया है कि आप ऐसा कैसे कर सकते हैं:"

class Home
{
 public static void main(String[] args)
 {
  Zoo.Mouse mouse = new Zoo.Mouse();
 }
}

"माउस वर्ग वास्तव में एक बहुत ही साधारण वर्ग है। तथ्य यह है कि यह चिड़ियाघर वर्ग के अंदर घोषित किया गया है, यह दो विशेष विशेषताएं देता है।"

1) बाहरी वर्ग के बाहर एक नेस्टेड वर्ग (जैसे माउस वर्ग) की वस्तु बनाते समय, आपको बाहरी वर्ग का नाम निर्दिष्ट करने के लिए डॉट ऑपरेटर का भी उपयोग करना चाहिए।

"इस तरह, उदाहरण के लिए: चिड़ियाघर.माउस।"

2) Zoo.Mouse वर्ग और इसकी वस्तुओं की चिड़ियाघर वर्ग के निजी स्थैतिक चर और विधियों तक पहुंच है (चूंकि माउस वर्ग भी चिड़ियाघर वर्ग के अंदर घोषित किया गया है)।

"आज के लिए इतना ही।"

"तो बस एक अतिरिक्त नाम और बस इतना ही?"

"हाँ।"

"यह पहले की तुलना में और भी आसान है।"