کلاس های درونی (Inner Classes)
کلاس درونی (Inner Class) یعنی کلاسی داخل یک کلاس دیگر. این کار، کد را منظم تر می کند. همچنین خواندن و نگهداری راحت تر می شود. برای دسترسی، اول شیءِ بیرونی را بساز. سپس شیءِ کلاس درونی را ایجاد کن.
کلاس های درونی چیست؟
در جاوا می توان کلاس ها را توی هم قرار داد. هدف، گروه بندیِ منطقیِ کلاس های مرتبط است. بنابراین کد تمیزتر می شود.
class OuterClass {
int x = 10;
class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
// Outputs 15 (5 + 10)
کلاس درونیِ private
کلاس درونی می تواند private یا protected باشد. اگر نخواهی بیرون دسترسی داشته باشد، آن را private اعلام کن.
class OuterClass {
int x = 10;
private class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
هشدار: دسترسی به کلاس درونیِ private از بیرون، خطا می دهد.
کلاس درونیِ static
کلاس درونی می تواند static باشد. در این حالت، بدون ساختن شیء بیرونی، به آن دسترسی داری.
class OuterClass {
int x = 10;
static class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass.InnerClass myInner = new OuterClass.InnerClass();
System.out.println(myInner.y);
}
}
// Outputs 5
نکته: مانند اعضای static، کلاس درونیِ static به اعضای نمونه بیرونی دسترسی ندارد.
دسترسی از درونی به بیرونی
مزیت کلاس های درونی این است که می توانند به ویژگی ها و متدهای کلاس بیرونی دسترسی داشته باشند.
class OuterClass {
int x = 10;
class InnerClass {
public int myInnerMethod() {
return x;
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.myInnerMethod());
}
}
// Outputs 10
گام های عملی سریع
- کلاس بیرونی بساز و یک فیلد ساده تعریف کن.
- کلاس درونی اضافه کن و مقداری برگردان.
- در کلاس های درونی مقدار بیرونی را چاپ کن.
نکته: برای تعامل با والدها، مبحث super و ارث بری را مرور کن.
جمع بندی سریع
- کلاس های درونی کد را منظم تر می کنند.
- می توانند private یا protected باشند.
- نسخه static بدون شیء بیرونی ساخته می شود.
- کلاس درونی به اعضای بیرونی دسترسی دارد.