کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Java – nested interface/اینترفیس تودرتو در Java

آموزش Java – nested interface/اینترفیس تودرتو در Java

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

نکاتی ضروری در استفاده از interface های تودرتو

تعداد نکته ی بسیار مهم وجود دارد که برنامه نویس جاوا در استفاده از interface های تودرتو بایستی رعایت نماید:

  1. interface ای که در سطح interface دیگری تعریف شده باشد، باید public باشد، اما interface ای که داخل بدنه ی یک کلاس اعلان شده باشد، می تواند با هر (تنظیم کننده سطح دسترسی) access modifier ای علامت گذاری شود.
  2. interface های تودرتو به صورت ضمنی static تعریف می شوند.

دستور تعریف interface ای که در سطح interface دیگری تعریف می شود، به شرح زیر می باشد:

interface interface_name{  
...  
interface nested_interface_name{  
...  
}  
}   

دستور تعریف interface ای که در سطح یک کلاس تعریف می شود به شرح زیر می باشد:

class class_name{  
...  
interface nested_interface_name{  
...  
}  
}   

مثالی کاربردی از یک interface که در سطح interface دیگری تعریف می شود

در مثال حاضر نحوه ی اعلان یک interface در interface دیگر و دسترسی به آن به صورت عملی نمایش داده شده است.

interface Showable{  
  void show();  
  interface Message{  
   void msg();  
  }  
}  
class TestNestedInterface1 implements Showable.Message{  
 public void msg(){System.out.println("Hello nested interface");}  
 public static void main(String args[]){  
  Showable.Message message=new TestNestedInterface1();//upcasting here  
  message.msg();  
 }  
}  

خروجی:

hello nested interface

همان طور که در مثال بالا مشاهده می کنید، برای دسترسی به interface تودرتوی Message اسم اینترفیس میزبان آن یعنی Showable نیز ذکر شده و امکان فراخوانی آن به صورت مستقیم برای برنامه نویس وجود ندارد. این درست مانند زمانی است که بخواهید به شیی داخل یک اتاق دسترسی داشته باشید. تا زمانی که وارد اتاق نشده اید، نمی توانید به شی مورد نظر دسترسی داشته باشید. در فریم ورک collection جاوا (JCF)، شرکت sun microsystem یک interface تودرتو به نام Entry تعبیه کرده است که خود در سطح interface دیگری به نام Map اعلان شده است. به منظور دسترسی به این interface از دستور Map.Entry استفاده می شود.

کد داخلی که کامپایلر جاوا برای interface تودرتو Message ایجاد می کند

کامپایلر جاوا خود به صورت داخلی interface های public و static زیر را تولید می کند:

public static interface Showable$Message  
{  
public abstract void msg();  
}  

مثال کاربردی از interface تودرتو که در سطح کلاس تعریف شده است

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

class A{  
  interface Message{  
   void msg();  
  }  
}    
class TestNestedInterface2 implements A.Message{  
 public void msg(){System.out.println("Hello nested interface");}  
 public static void main(String args[]){  
  A.Message message=new TestNestedInterface2();//upcasting here  
  message.msg();  
 }  
}  

خروجی:

hello nested interface

سوال: آّیا می توان یک کلاس را در بدنه ی interface تعریف کرد؟

در پاسخ باید گفت بلی. اگر یک کلاس را در بستر interface تعریف کنیم، کامپایلر جاوا یک کلاس static تودرتو ایجاد می نماید. در زیر نحوه ی تعریف یک کلاس داخل interface به صورت کاربردی نمایش داده می شود:

interface M{  
  class A{}  
}  
1396/08/03 2831 1368
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...