مشخصات مقاله
-
1513
-
0.0
-
3344
-
0
-
0
آموزش Java – کلاس تودرتو محلی/Local inner class در Java
آموزش Java – کلاس تودرتو محلی/Local inner class در Java
کلاسی که در سطح کلاس دیگر و داخل بدنه ی یکی از متدهای آن تعریف شده باشد، در اصطلاح کلاس تودرتو محلی/inner local class خوانده می شود. به منظور فراخوانی متدهای این نوع کلاس بایستی از این کلاس داخل بدنه ی متد نمونه سازی نمایید.
مثال کاربردی از کلاس تودرتو ی محلی در Java (local inner class)
public class localInner1{
private int data=30;//instance variable
void display(){
class Local{
void msg(){System.out.println(data);}
}
Local l=new Local();
l.msg();
}
public static void main(String args[]){
localInner1 obj=new localInner1();
obj.display();
}
}
خروجی:
30
کلاس و کد داخلی که کامپایلر تولید می کند
در چنین شرایطی کامپایلر یک کلاس به نام Simple$1Local ایجاد می کند که محتوای کلاس میزبان (outer class) را در خود ذخیره کرده و به آن اشاره می کند.
import java.io.PrintStream;
class localInner1$Local
{
final localInner1 this$0;
localInner1$Local()
{
super();
this$0 = Simple.this;
}
void msg()
{
System.out.println(localInner1.access$000(localInner1.this));
}
}
نکته:
متغیر محلی (Local) نمی تواند به صورت private، public یا protected تعریف شود.
نکاتی درباره ی local inner class/کلاس تودرتو تعریف شده در بدنه ی متد
- کلاس تودرتو تعریف شده در بدنه ی متد نمی تواند از بیرون متد میزبان خود فراخوانی شود.
- کلاس تودرتو تعریف شده در بدنه ی متد تا ویرایش 1.7 مجموعه ابزار برنامه نویسی جاوا/JDK قابلیت دسترسی به متد غیر final محلی (non-final local variable) را نداشت. از ویرایش 1.8 به بعد JDK این امکان فراهم شده تا به متغیر محلی غیر final در کلاس تودرتوی محلی نیز دسترسی داشت.
مثال کاربردی از کلاس تودرتوی تعریف شده در بدنه ی متد (local inner class) با متغیر محلی (local variable)
در زیر همان طور که مشاهده می کنید مقدار متغیر value در اختیار متد msg() از کلاس تودرتوی محلی قرار گرفته و در خروجی چاپ شده است.
class localInner2{
private int data=30;//instance variable
void display(){
int value=50;//local variable must be final till jdk 1.7 only
class Local{
void msg(){System.out.println(value);}
}
Local l=new Local();
l.msg();
}
public static void main(String args[]){
localInner2 obj=new localInner2();
obj.display();
}
}
خروجی:
50