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

آموزش Java – کلاس تودرتو static /static nested class در Java

آموزش Java – کلاس تودرتو static /static nested class در Java

¬یک کلاس static که در سطح کلاس دیگری تعریف شده باشد در جاوا تحت عنوان static nested class خوانده می شود. این نوع کلاس نمی تواند به فیلدها و متدهای غیر static دسترسی داشته باشد. به منظور دسترسی به این کلاس لازم است اسم کلاس میزبان (outer class) ذکر شود.

  • این کلاس می تواند به فیلدهای static کلاس میزبان (outer class) از جمله اعضای private دسترسی داشته باشد.
  • کلاس تودرتوی Static نمی تواند به متدها و فیلدهای داده ای غیر static دسترسی داشته باشد.

مثال کاربردی از کلاس تودرتوی static با instance method یا متد متعلق به نمونه ی کلاس

class TestOuter1{  
static int data=30;  
static class Inner{  
void msg(){System.out.println("data is "+data);}  
}  
public static void main(String args[]){  
TestOuter1.Inner obj=new TestOuter1.Inner();  
obj.msg();  
}  
}  

خروجی:

data is 30

در مثال جاری، شما بایستی یک نمونه از کلاس static تودرتو ایجاد نمایید چراکه این کلاس دربردارنده ی یک (متد متعلق به نمونه ای از کلاس) instance method به نام msg() می باشد. اما همان طور که احتمالا از قبل می دانید، برای دسترسی به کلاس تودرتوی static لازم نیست یک آبجکت از کلاس میزبان (outer class) ایجاد نمایید زیرا کلاس مورد نظر یک کلاس static بوده و برای فراخوانی خود کلاس static یا اعضای static آن (متدها، فیلدها static و غیره ..) نیازی به ایجاد آبجکت از روی کلاس نیست.

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

import java.io.PrintStream;  
static class TestOuter1$Inner  
{  
TestOuter1$Inner(){}  
void msg(){  
System.out.println((new StringBuilder()).append("data is ")  
.append(TestOuter1.data).toString());  
}    
}  

مثال کاربردی از کلاس static تودرتو با متد static

برای دسترسی به عضو static که در سطح کلاس static تودرتو تعریف شده، لازم نیست یک نمونه از روی کلاس مورد نظر (static تودرتو) ایجاد شود.

class TestOuter2{  
static int data=30;  
static class Inner{  
static void msg(){System.out.println("data is "+data);}  
}  
public static void main(String args[]){  
TestOuter2.Inner.msg();//no need to create the instance of static nested class  
}  
}  

خروجی:

data is 30
1396/08/03 4110 1415
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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