1. অভ্যন্তরীণ ক্লাস

আপনি সম্প্রতি শিখেছেন যে স্ট্যাটিক ভেরিয়েবল এবং স্ট্যাটিক পদ্ধতি আছে। দেখা যাচ্ছে যে স্ট্যাটিক ক্লাসও আছে। কিন্তু আমরা একটি দূরত্ব থেকে এই বিষয় যোগাযোগ করব.

জাভাতে, আপনি সম্পূর্ণভাবে ক্লাসের মধ্যে ক্লাস ঘোষণা করতে পারবেন। এবং এমনকি ক্লাসের মধ্যে ক্লাস যা ক্লাসের মধ্যে ক্লাসের মধ্যে। এটা সব খুব সহজ দেখায়:

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()পদ্ধতিটি ব্যবহার করুন, যা একটি রিটার্ন করে ।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স্পষ্টভাবে বলে যে এই পরিবর্তনকারী দ্বারা চিহ্নিত ভেরিয়েবল এবং পদ্ধতিগুলি শুধুমাত্র তাদের ক্লাসের মধ্যে থেকে অ্যাক্সেস করা যেতে পারে। একটি স্ট্যাটিক নেস্টেড বর্গ কি তার বাইরের শ্রেণীর ভিতরে? হ্যাঁ, তাই কোন সমস্যা নেই! আপনি যতটা চান তাদের অ্যাক্সেস.