در جاوا میتوانیم در داخل کلاس یک کلاس دیگر تعریف کنیم که به آن inner class میگویند
کلاس های داخلی میتوانند فیلد ها و متد های کلاس خارجی را ببینند
برای استفاده از کلاس داخلی در کلاس دیگر باید از کلاس خارجی حتما یک instance بسازیم
کلاس داخلی خود میتواند ارث بری هم داشته باشد
اگر کلاس داخلی private باشد دیگر نمیتوان از آن Object جدیدی ساخت
کلاس های داخلی نمیتوانند عناصر static داشته باشند
کلاس های inner که بصورت static تعریف شود را nested class میگوییم
کلاس هایی بدون Reference و instance هستند و بیشتر در داخل متد استفاده میشوند
anonymous class ها constractor ندارند
local class به کلاس هایی گفته میشود که در داخل متد ایجاد شوند
کاربرد این کلاس موقعی است که از یک کلاس یا اینترفیس دیگر ارث بری کرده باشد و و تنها کاربردش محدود به عملیاتی در درون متد باشد چون قابل ارجاع نیست
خیلی به ندرت کاربرد دارد
public class OuterClass {
protected static class InnerClass{
public void method1() {
System.out.println("method 1 called from inner class");
}
}
public void method1() {
System.out.println("method 1 called from outer class");
class LocalClass extends InnerClass{
@Override
public void method1() {
System.out.println("method 1 called from local class");
}
}
LocalClass lc = new LocalClass();
lc.method1();
LocalClass lc2 = new LocalClass() {
@Override
public void method1() {
System.out.println("method 1 called from local class with @Override");
}
};
lc2.method1();
}
public InnerClass method2(){
class LocalClass2 extends InnerClass{
@Override
public void method1() {
System.out.println("method 2 called from local class 2");
}
}
LocalClass2 lc2 = new LocalClass2();
return lc2;
}
public static void main(String[] args) {
//anonymous class
new OuterClass().method1();
//anonymous class
new OuterClass() {
@Override
public void method1() {
System.out.println("method 1 called from outer class with @Override");
}
}.method1();
OuterClass.InnerClass out = new InnerClass();
out.method1();
}
}