آموزش کلاس‌های داخلی در جاوا

آموزش کلاس‌های داخلی در جاوا
مرداد ۲۱, ۱۳۹۸ No Comments javascript زهرا ابراهیمی

در آخرین مطلب از بخش اول آموزش جاوا، در مورد کلاس‌های داخلی جاوا صحبت خواهیم کرد. از اینکه تاکنون با ما همراه بودید از شما خوانندگان همیشگی سایت آریانیکا سپاس‌گزاریم.

کلاس‌های تودرتو

درست مثل مطلب متدها، در جاوا  متغیرهای یک کلاس می‌توانند یک کلاس دیگر را به‌عنوان عضو خود داشته باشند. نوشتن یک کلاس درون کلاس دیگر در جاوا مجاز است. کلاس نوشته‌شده در درون کلاس تودرتو نامیده می‌شود و کلاسی که دارای کلاس داخلی است، کلاس بیرونی نامیده می‌شود.

دستور زبان

در زیر دستور زبان نوشتن یک کلاس تودرتو توضیح داده‌شده است. در اینجا، کلاس Outer_Demois کلاس بیرونی و کلاس Inner_Demo کلاس تودرتو است.

class Outer_Demo {

   class Inner_Demo {

   }

}

کلاس‌های تودرتو به دو نوع تقسیم‌بندی می‌شوند:

  • کلاس‌های تو در تو غیر استاتیک – این‌ها اعضای غیر استاتیک یک کلاس هستند.
  • کلاس‌های تو در تو استاتیک – این‌ها اعضای ایستای یک کلاس هستند.

کلاس‌های داخلی در جاوا

کلاس‌های داخلی (کلاس‌های تو در تو غیر استاتیک)

کلاس‌های داخلی یک مکانیزم امنیتی در جاوا هستند. ما می‌دانیم که یک کلاس خصوصی نمی‌تواند در  دسترسی همه باشد. اگر کلاسی را به‌عنوان عضوی از کلاس‌های دیگر قرار دهیم ، کلاس داخلی می‌تواند خصوصی باشد  و این نیز برای دسترسی  اعضای خصوصی یک کلاس استفاده می‌شود.

کلاس‌های داخلی بسته به نحوه و مکان آن‌ها به سه نوع تقسیم‌بندی می‌شوند که عبارت‌اند از:

  • کلاس داخلی
  • روش داخلی محلی
  • کلاس داخلی ناشناس

کلاس داخلی

ایجاد یک کلاس داخلی بسیار ساده است. شما فقط باید یک کلاس را در یک کلاس دیگر بنویسید. برخلاف یک کلاس،  کلاس داخلی می‌تواند خصوصی باشد و هنگامی‌که کلاس داخلی را خصوصی اعلام کنید، نمی‌توان از  خارج از به کلاس دسترسی پیدا کرد.

در زیر برنامه‌ای برای ایجاد یک کلاس داخلی و دسترسی به آن نوشته‌شده است. در مثال داده‌شده، کلاس داخلی را خصوصی‌سازی می‌کنیم و از طریق  روشی به کلاس دسترسی پیدا می‌کنیم.

مثال

class Outer_Demo {

   int num;

   // inner class

   private class Inner_Demo {

      public void print() {

         System.out.println(“This is an inner class”);

      }

   }

   // Accessing he inner class from the method within

   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();

      // Accessing the display_Inner() method.

      outer.display_Inner();

   }

}

در اینجا شما می‌توانید ببینید که Outer_Demo کلاس بیرونی است، Inner_Demo کلاس داخلی است، display_Inner() روشی است که در آن ما در حال ایجاد کلاس داخلی هستیم.  این روش از mainmethod فراخوانی می‌شود.

اگر برنامه فوق را کامپایل و اجرا کنید، نتیجه زیر را دریافت خواهید کرد

خروجی

This is an inner class.

دسترسی برای اعضای خصوصی

همان‌طور که قبلاً ذکر شد، کلاس‌های داخلی را می‌توان تنها برای دسترسی اعضای خصوصی تنظیم کرد. فرض کنید یک کلاس دارای اعضای خصوصی برای دسترسی به آن‌ها است. شما می‌توانید از کلاس دیگری (که از آن می‌خواهید به اعضای خصوصی دسترسی داشته باشید)، با استفاده از روش getValue () (داخل)، یک کلاس داخلی در آن بنویسید. اعضای خصوصی با این روش در داخل کلاس داخلی دسترسی پیدا می‌کنند.

برای ترسیم کلاس درونی، ابتدا باید کلاس بیرونی را در نظر بگیرید. پس‌ازآن، با استفاده از کلاس بیرونی، می‌توانید کلاس داخلی را فعال کنید.

Outer_Demo outer = new Outer_Demo();

Outer_Demo.Inner_Demo inner = outer.new Inner_Demo();

برنامه زیر نشان می‌دهد که چگونه با استفاده از کلاس داخلی به اعضای خصوصی یک کلاس دسترسی پیدا کنید.

مثال

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[]) {

      // Instantiating the 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());

   }

}

اگر برنامه فوق را کامپایل و اجرا کنید، نتیجه زیر را دریافت خواهید کرد

خروجی

This is the getnum method of the inner class: 175

کلاس داخلی محلی

در جاوا، می‌توانیم یک کلاس را به روشی بنویسیم که  به آن نوع محلی میگویند. همانند متغیرهای محلی، کلاس داخلی محلی نیز محدود می‌شود.

یک کلاس داخلی محلی  می‌تواند فقط با روش تعریف‌شده در کلاس تعریف شود. برنامه زیر نشان می‌دهد که چگونه از یک کلاس داخلی محلی استفاده کنید.

مثال

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

      // Accessing the inner class

      MethodInner_Demo inner = new MethodInner_Demo();

      inner.print();

   }

   public static void main(String args[]) {

      Outerclass outer = new Outerclass();

      outer.my_Method();

   }

}

اگر برنامه فوق را کامپایل و اجرا کنید، نتیجه زیر را دریافت خواهید کرد

خروجی

This is method inner class 23

کلاس داخلی ناشناس

کلاس داخلی بدون نام کلاس ناشناس نامیده شده به‌عنوان یک کلاس داخلی ناشناس شناخته می‌شود. در مورد کلاس‌های داخلی ناشناس، ما در همان زمان اعلام می‌کنیم و آن‌ها را اثبات می‌کنیم. به‌طورکلی، هر وقت که شما نیاز به لغو روش کلاس یا یک رابط کاربری دارید، آن‌ها مورداستفاده قرار می‌گیرند. دستور زبان کلاس داخلی ناشناس به شرح زیر است

دستور زبان

AnonymousInner an_inner = new AnonymousInner() {

   public void my_method() {

      ……..

      ……..

   }

};

برنامه زیر نشان می‌دهد چگونه با استفاده از کلاس داخلی ناشناس متد کلاس را لغو کنید.

مثال

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();

   }

}

اگر برنامه فوق را کامپایل و اجرا کنید، نتیجه زیر را دریافت خواهید کرد –

خروجی

This is an example of anonymous inner class

به همان شیوه، شما می‌توانید روش‌های کلاس متمرکز و همچنین رابط کاربری را با استفاده از یک کلاس داخلی ناشناس لغو کنید.

کلاس‌های داخلی نامعلوم تحت  عنوان Argument

به‌طورکلی، اگر یک روش ، موضوعی از یک رابط، یک کلاس انتزاعی را قبول کند، می‌توانیم رابط را پیاده‌سازی کنیم، کلاس انتزاعی را گسترش دهیم و آن موضوع را به روش منتقل کنیم. اگر هم  یک کلاس باشد، می‌توانیم به‌طور مستقیم آن را به روش انتقال دهیم.

اما در هر سه مورد، می‌توانید کلاس داخلی ناشناس را به روش انتقال دهید. در اینجا دستور زبان انتقال یک کلاس داخلی ناشناس  به یک روش را مشاهده می‌کنید.

obj.my_Method(new My_Class() {

   public void Do() {

      …..

      …..

   }

});

برنامه زیر نشان می‌دهد که چگونه یک کلاس داخلی ناشناس را به یک روش انتقال دهید.

مثال

// 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();

      // Passing an anonymous inner class as an argument

      obj.displayMessage(new Message() {

         public String greet() {

            return “Hello”;

         }

      });

   }

}

اگر برنامه فوق را کامپایل و اجرا کنید، نتیجه زیر را دریافت خواهید کرد –

خروجی

Hello, This is an example of anonymous inner class as an argument

کلاس‌های داخلی استاتیک

کلاس داخلی استاتیکی یک کلاس توانی است که یک عضو ثابت از کلاس بیرونی است. این کلاس را می‌توان بدون فعال کردن کلاس بیرونی، با استفاده از سایر اعضای استاتیک قابل‌دسترسی کرد. درست مانند اعضای استاتیک، کلاس درونی استاتیک دسترسی، متغیرهای نمونه و روش‌های کلاس بیرونی را ندارد. دستور زبان  کلاس درونی استاتیک به شرح زیر است

دستور زبان

class MyOuter {

   static class Nested_Demo {

   }

}

فعال  کردن یک کلاس درونی استاتیک، کمی متفاوت از فعال‌سازی یک کلاس درونی است. برنامه زیر نشان می‌دهد که چگونه از کلاس درونی استاتیک استفاده کنید.

مثال

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();

   }

}

اگر برنامه فوق را کامپایل و اجرا کنید، نتیجه زیر را دریافت خواهید کرد

خروجی

This is my nested

tutorialspoint

Tags
درباره نویسنده

Leave a reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *