Java内部クラスと匿名クラス


内部クラス


クラスに別のクラスを宣言すると、2つのクラスのメンバーに簡単にアクセスできます.
クラス間でデータを共有できる点は良いように見えますが、論理が複雑であればあるほどエラーが発生しやすくなります.
public class OuterClass {
    int num = 10;
    String str1 = "Java";
    static String str11 = "world";

    public OuterClass() {
        System.out.println("OuterClass constructor");
    }

    class InnerClass {
        int num = 100;
        String str2 = str1;

        public InnerClass() {
            System.out.println("InnerClass constructor");
        }
    }

    static class SInnerClass {
        int num = 1000;
        // static 클래스는 외부 클래스 멤버에 접근 불가
        String str3 = str11;

        public SInnerClass() {
            System.out.println("static InnerClass constructor");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        OuterClass oc = new OuterClass();
        System.out.println("oc.num : " + oc.num);
        System.out.println("oc.str1 : " + oc.str1);

        System.out.println();

        // inner 클래스
        OuterClass.InnerClass in = oc.new InnerClass();
        System.out.println("in.num : " + in.num);
        System.out.println("in.str2 : " + in.str2);

        System.out.println();

        // static 클래스
        OuterClass.SInnerClass si = new OuterClass.SInnerClass();
        System.out.println("si.num : " + si.num);
        System.out.println("si.str3 : " + si.str3);

        System.out.println();

    }
}
これは実務ではあまり使われない符号化方法である.

匿名クラス


名前のないクラスは、主に재정의 하는 목적を使用します.
public class AnonymousClass {
    public AnonymousClass() {
        System.out.println("AnonymousClass constructor");
    }

    public void method() {
        System.out.println("--AnonymousClass's method START--");
    }
}
package inner;

public class Main {
    public static void main(String[] args) {
      	// 익명 클래스는 딱 한번만 실행된다.
        new AnonymousClass() {
            @Override
            public void method() {
                System.out.println("--AnonymousClass's Override method START --");
            }
        }.method();
    }
}
匿名クラスは主に인터페이스または추상클래스で使用される.