کلاس تو در تو یا همون Inner Class ها در جاوا به کلاسی گفته میشود که درون یک کلاس دیگر تعریف شود. این کار چند قابلیت را برای ما ایجاد میکند:
- خوانایی کد را افزایش میدهد.
- حجم کد نویسی را کاهش میدهد.
- در مرتب سازی کدها بسیار کمک میکند
4 مدل از این کلاس تو در تو در جاوا وجود دارد:
- Nested Inner class
- Method Local inner classes
- Anonymous inner classes
- Static nested classes
حالت اول) Nested Inner class
این نوع کلاس تو در تو، به تمامی متغیرهای Private کلاس بالا دستی خودش دسترسی دارد.
class Outer { class Inner { public void show() { System.out.println("Nested Inner Class Test"); } } } class Main { public static void main(String[] args) { Outer.Inner in = new Outer().new Inner(); in.show(); } }
حالت دوم) Method Local inner classes
این نوع کلاس تو در تو در داخل یکی از متدهای کلاس بالا دستی خود تعریف میشود و داخل همان متد قابل استفاده است. این کلاس در صورتی که متغیرهای متد final نباشند نمیتواند به آنها دسترسی بگیرد. البته این موضوع در JDK های 1.8 به بعد اووکی شده است :
class Outer { void outerMethod() { System.out.println("inside outerMethod"); class Inner { void innerMethod() { System.out.println("inside innerMethod"); } } Inner y = new Inner(); y.innerMethod(); } } class MethodDemo { public static void main(String[] args) { Outer x = new Outer(); x.outerMethod(); } }
حالت سوم) Static nested classes
class Outer { private static void outerMethod() { System.out.println("inside outerMethod"); } static class Inner { public static void main(String[] args) { System.out.println("inside inner class Method"); outerMethod(); } } }
حالت چهارم) Anonymous inner classes
این حالت یکی از پرکاربردترین نوهای کلاسهای تو در تو میباشد. این روش مخصوصا در JavaFX و برنامهنویسی گرافیکی بسیار کاربردی هستش و دائما استفاده میشه. این نوع از کلاس تو در تو، اسمی ندارد و در جا تعریف و استفاده میشه. نمونهی اون رو در زیر میتونید ببینید:
class InnerClassTest { void show() { System.out.println("i am in show method of super class"); } } class Flavor1Demo { // An anonymous class with Demo as base class static InnerClassTest d = new InnerClassTest() { void show() { super.show(); System.out.println("i am in Flavor1Demo class"); } }; public static void main(String[] args){ d.show(); } }
توصیه میکنم نوع آخر رو بسیار خوب یاد بگیرید.
دیدگاهتان را بنویسید