1. आतील वर्ग

तुम्ही अलीकडेच शिकलात की स्टॅटिक व्हेरिएबल्स आणि स्टॅटिक पद्धती आहेत. असे दिसून आले की स्थिर वर्ग देखील आहेत. परंतु आम्ही या विषयावर दूरून संपर्क साधू.

Java मध्ये, तुम्हाला वर्गांमध्ये वर्ग घोषित करण्याची पूर्णपणे परवानगी आहे. आणि अगदी वर्गांमधले वर्ग जे वर्गांच्या आत आहेत. हे सर्व अगदी सोपे दिसते:

class OuterClass
{
   variables of the class
   methods of the class

   class NestedClass
   {
      variables of the class
      methods of the class
   }
}

आम्ही फक्त एक वर्ग दुसऱ्या आत घोषित करतो. तितकेच सोपे.

उदाहरण:

public class Solution
{
   static ArrayList<Point> points = new ArrayList<Point>();

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;
      points.add(point);
   }

   static class Point
   {
      int x;
      int y;
   }
}

नेस्टेड वर्ग स्थिर किंवा नॉन-स्टॅटिक असू शकतात. स्टॅटिक नेस्टेड क्लासेसना फक्त स्टॅटिक नेस्टेड क्लासेस म्हणतात . नॉन-स्टॅटिक नेस्टेड क्लासेसना इनर क्लासेस ( इनर क्लासेस ) म्हणतात .



2. स्थिर वर्ग

स्टॅटिक नेस्टेड वर्ग त्यांच्या बाह्य वर्गाच्या बाहेर वापरले जाऊ शकतात. अशा वर्गात सार्वजनिक प्रवेश सुधारक असल्यास, तो प्रोग्राममध्ये कुठेही वापरला जाऊ शकतो. असे वर्ग कोणत्याही सामान्य वर्गापासून जवळजवळ अभेद्य असतात. पण काही फरक आहेत.

वर्गाचे नाव

जर तुम्हाला स्टॅटिक नेस्टेड क्लासचा संदर्भ त्याच्या बाह्य वर्गाव्यतिरिक्त इतरत्र घ्यायचा असेल, तर तुम्हाला वर्गाचे नाव नमूद करावे लागेल, ज्यामध्ये बाह्य वर्गाचे नाव आणि नेस्टेड क्लासचे नाव असेल. या नावाचे सर्वसाधारण स्वरूप येथे आहे:

OuterClass.InnerClass

उदाहरणे:

बाहेरचा वर्ग नेस्टेड वर्ग नेस्टेड वर्गाचे पूर्ण नाव
com.codegym.Solution
Point
com.codegym.Solution.Point
java.util.Map
Entry
java.util.Map.Entry
java.util.Files
DirectoryStream
java.util.Files.DirectoryStream
java.nio.WindowsPath
Closeable
java.nio.WindowsPath.Closeable

नेस्टेड क्लासचा स्वतःचा नेस्टेड क्लास असल्यास, त्यांची नावे फक्त डॉट वापरून जोडली जातात.

JDK मधील नेस्टेड क्लासचे एक सामान्य उदाहरण म्हणजे वर्गाच्या Entryआत असलेला वर्ग Map. जर तुम्हाला ऑब्जेक्टमध्ये संग्रहित की-व्हॅल्यू जोड्यांचा संच मिळवायचा असेल HashMap, तर entrySet()पद्धत वापरा, जी a मिळवते .Set<Map.Entry>

लक्षात घ्या की हे बाह्य वर्ग आणि नेस्टेड क्लासचे उदाहरण आहे.Map.Entry

एखादी वस्तू तयार करणे

स्टॅटिक नेस्टेड क्लासचे ऑब्जेक्ट तयार करणे खूप सोपे आहे. हे असे दिसते:

OuterClass.NestedClass name = new OuterClass.NestedClass();

हे सर्व सामान्य वर्गांसारखेच आहे, परंतु नावात दोन भाग आहेत.

कॉलिंग स्टॅटिक पद्धती

जर एखाद्या स्टॅटिक क्लासमध्ये स्टॅटिक पद्धती असतील, तर तुम्ही त्यामध्ये सामान्य क्लासच्या स्टॅटिक पद्धतींप्रमाणे प्रवेश करू शकता (परंतु क्लासच्या नावात दोन भाग असतील).

OuterClass.NestedClass.staticMethod();

स्टॅटिक व्हेरिएबल्समध्ये प्रवेश करणे

नेस्टेड क्लासच्या सार्वजनिक स्थिर व्हेरिएबल्समध्ये प्रवेश करणे देखील सोपे आहे:

OuterParent.NestedClass.nameOfStaticVariable


3. स्थिर वर्गांची वैशिष्ट्ये

स्टॅटिक नेस्टेड क्लासेसना स्टॅटिक म्हणण्याचे कमीत कमी कारण असते. ते नेहमीच्या वर्गांप्रमाणेच वागतात . नॉन-स्टॅटिक पद्धतींमधून प्रवेश करण्यावर कोणतेही निर्बंध नाहीत.

जर तुम्ही स्टॅटिक नेस्टेड क्लासच्या बाहेरील क्लासमध्ये काम करत असाल, तर तुम्हाला सर्वात सामान्य (नेस्टेड नाही आणि स्टॅटिक नाही) क्लासपेक्षा कोणताही फरक दिसणार नाही.

उदाहरण:

स्थिर नेस्टेड पॉइंट वर्ग सामान्य बिंदू वर्ग.
public class Solution
{
   static ArrayList<Point> points;

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;
      points = new ArrayList<Point>();
      points.add(point);
   }

   static class Point
   {
      int x;
      int y;
   }
}
public class Solution
{
   static ArrayList<Point> points;

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;
      points = new ArrayList<Point>();
      points.add(point);
   }
}

class Point
{
   int x;
   int y;
}

जर तुम्ही काही स्टॅटिक नेस्टेड क्लास घेतला आणि तो त्याच्या बाह्य वर्गाच्या बाहेर हलवला तर फक्त एकच गोष्ट बदलेल ती म्हणजे नवीन क्लास यापुढे त्याच्या पूर्वीच्या बाह्य वर्गातील व्हेरिएबल्स आणि पद्धतींमध्ये प्रवेश करू शकणार नाही .private static

उदाहरण:

स्थिर नेस्टेड पॉइंट वर्ग सामान्य बिंदू वर्ग.
public class Solution
{
   private static ArrayList<Point> points;

   static class Point
   {
      int x;
      int y;

      public static void main(String[] args)
      {
         Point point = new Point();
         point.x = 100;
         point.y = 200;

         // This will work
         points = new ArrayList<Point>();
         points.add(point);
      }
   }
}
public class Solution
{
   private static ArrayList<Point> points;
}

class Point
{
   int x;
   int y;

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;

      // This will generate an error
      points = new ArrayList<Point>();
      points.add(point);
   }
}

mainसामान्य वर्गातील पद्धत Pointवर्गाच्या व्हेरिएबलमध्ये प्रवेश करू शकत नाही !private static pointsSolution

स्टॅटिक नेस्टेड क्लास आणि सामान्य क्लासमधील हा मुख्य फरक आहे. स्टॅटिक नेस्टेड क्लासच्या पद्धती सर्व स्टॅटिक व्हेरिएबल्स आणि त्यांच्या बाह्य क्लासच्या पद्धतींमध्ये प्रवेश करू शकतात, जरी ते घोषित केले असले तरीही private.

आणि जर आपण याबद्दल विचार केला तर आश्चर्य का वाटावे? मॉडिफायर privateस्पष्टपणे सांगतो की या सुधारकाने चिन्हांकित केलेले व्हेरिएबल्स आणि पद्धती केवळ त्यांच्या वर्गातूनच प्रवेश करू शकतात. स्टॅटिक नेस्टेड क्लास त्याच्या बाह्य वर्गात आहे का? होय, त्यामुळे काही हरकत नाही! तुम्हाला पाहिजे तितके त्यांना प्रवेश करा.