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

آموزش Java – کلاس های تودرتو فاقد نام /anonymous inner class در Java

آموزش Java – کلاس های تودرتو فاقد نام /anonymous inner class در Java

یک کلاس که داخل کلاس دیگر تعریف شده و فاقد نام باشد (اسم آن توسط کامپایلر تشخیص داده شده و انتخاب شود) در جاوا anonymous inner class خوانده می شود. از این نوع کلاس تودرتو بایستی برای بازنویسی (override) متد کلاس پدر یا interface در سطح کلاس دیگر استفاده شود. کلاس های تودرتو فاقد نام به دو صورت زیر قابل تعریف می باشد:

  • کلاس (می تواند abstract و انتزاعی باشد یا یک کلاس واقعی)
  • Interface

مثال کاربردی از کلاس تودرتو فاقد نام (anonymous inner class) با استفاده از کلاس abstract

abstract class Person{  
abstract void eat();  
}  
class TestAnonymousInner{  
public static void main(String args[]){  
Person p=new Person(){  
void eat(){System.out.println("nice fruits");}  
};  
p.eat();  
}  
}  

خروجی:

nice fruits

جزئیات و عملکرد داخلی کد مورد نظر

Person p=new Person(){  
void eat(){System.out.println("nice fruits");}  
};  
  1. یک کلاس جدید ایجاد شده که اسم آن را کامپایلر انتخاب می کند. این کلاس از کلاس Person ارث بری داشته و بدنه ی متد eat() را پیاده سازی می کند.
  2. یک آبجکت از جنس کلاس فاقد نام/ Anonymous classایجاد شده که متغیر p از نوع کلاس Person به آن اشاره می کند (محتوای آن را دربرمی گیرد).

کد و کلاس داخلی که خود کامپایلر ایجاد می کند

import java.io.PrintStream;  
static class TestAnonymousInner$1 extends Person  
{  
TestAnonymousInner$1(){}  
void eat()  
{  
System.out.println("nice fruits");  
}  
}  

مثال کاربردی از کلاس تودرتو فاقد نام (anonymous inner class) با استفاده از interface

interface Eatable{  
void eat();  
}  
class TestAnnonymousInner1{  
public static void main(String args[]){  
Eatable e=new Eatable(){  
public void eat(){System.out.println("nice fruits");}  
};  
e.eat();  
}  
}  

خروجی:

nice fruits

جزئیات و عملکرد داخلی کد مورد نظر

دو عملیات اصلی که پشت این کد اتفاق می افتد، به شرح زیر می باشد:

Eatable p=new Eatable(){  
void eat(){System.out.println("nice fruits");}  
};  
  1. یک کلاس (فاقد نام) anonymous تولید می شود که اسم آن را کامپایلر انتخاب می نماید و این کلاس اینترفیس Eatable را پیاده سازی کرده و بدنه ی متد eat() را در خود تعریف می کند.
  2. یک آّبجکت از جنس کلاس Anonymous ایجاد می شود که متغیری به نام p از نوع اینترفیس Eatable آن را در خود نگاه می دارد و به آن اشاره دارد.

کد و کلاس داخلی که خود کامپایلر تولید می کند

import java.io.PrintStream;  
static class TestAnonymousInner1$1 implements Eatable  
{  
TestAnonymousInner1$1(){}  
void eat(){System.out.println("nice fruits");}  
}  
1396/08/03 5196 2138
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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