مشخصات مقاله
-
1368
-
0.0
-
2830
-
0
-
0
آموزش Java – nested interface/اینترفیس تودرتو در Java
آموزش Java – nested interface/اینترفیس تودرتو در Java
interface ای که در سطح interface یا کلاس دیگری تعریف شده باشد تحت عنوان nested interface خوانده می شود. توسعه دهنده می تواند با بهره گیری از این امکان در جاوا، interface های مرتبط را در مکانی واحد سازمان دهی کرده و نگهداشت کد را آسان سازد. برای دسترسی به interface ای که در بدنه ی کلاس یا interface دیگری تعریف شده، لازم است اسم کلاس یا interface میزبان آن ذکر شده و در غیر این صورت، برای مثال به طور مستقیم، امکان دسترسی به آن وجود ندارد.
نکاتی ضروری در استفاده از interface های تودرتو
تعداد نکته ی بسیار مهم وجود دارد که برنامه نویس جاوا در استفاده از interface های تودرتو بایستی رعایت نماید:
- interface ای که در سطح interface دیگری تعریف شده باشد، باید public باشد، اما interface ای که داخل بدنه ی یک کلاس اعلان شده باشد، می تواند با هر (تنظیم کننده سطح دسترسی) access modifier ای علامت گذاری شود.
- 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{}
}