innerClass چیست ؟
nested class (کلاس های تو در تو)
نوشتن یک کلاس درون دیگر کلاس ها در جاوا مجاز است. کلاس نوشته شده در درون کلاس دیگر nested class نامیده می شود
و کلاسی که دارای کلاس داخلی است، outer class یا کلاس بیرونی نامیده می شود.
class Outer_Demo {
class Inner_Demo {
}
}
Non-static nested classes:
این شامل اعضای غیر استاتیکی یک کلاس است.
Static nested classes:
این شامل اعضای ایستا یک کلاس است.
کلاس های داخلی (Non-static nested classes)
طبقات داخلی از سه نوع بسته به نحوه و مکان آنها تعریف می شود. آن ها هستند: Inner Class Method-local Inner Class Anonymous Inner Class

مرجع کامل: https://pvlearn.com/product/%DA%A9%D9%84%D8%A7%D8%B3-%D9%87%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AE%D9%84%DB%8C-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7/
متد محلی کلاس داخلی در جاوا، می توانیم یک کلاس را در یک متد بنویسیم و این یک نوع محلی خواهد بود. همانند متغیرهای محلی، محدوده کلاس داخلی در متد محدود می شود.
یک کلاس داخلی متد می تواند فقط در متد تعریف شده در کلاس تعریف شود.
public class Outerclass {
// instance method of the outer class
void my_Method() {
int num = 23;
// method-local inner class
class MethodInner_Demo {
public void print() {
System.out.println("This is method inner class "+num);
}
} // end of inner class
// Accessing the inner class
MethodInner_Demo inner = new MethodInner_Demo();
inner.print();
}
public static void main(String args[]) {
Outerclass outer = new Outerclass();
outer.my_Method();
}
}
کلاس داخلی استاتیک یک کلاس درونی استاتیک در واقع یک کلاس داخلی تودرتو است که به عنوان یک عضو ثابت از کلاس بیرونی است.
این کلاس می تواند بدون اکتیو کردن کلاس بیرونی، با استفاده از سایر اعضای استاتیک قابل دسترسی باشد.
ساختار کلاس داخلی استاتیک بصورت زیر می باشد:
class MyOuter {
static class Nested_Demo {
}
}
public class Outer {
static class Nested_Demo {
public void my_method() {
System.out.println("This is my nested class");
}
}
public static void main(String args[]) {
Outer.Nested_Demo nested = new Outer.Nested_Demo();
nested.my_method();
}
}