📋 내부 클래스

✅ 내부 클래스 유형

✅ 인스턴스 내부 클래스

package section13.ex01_instance;

class Outer {
    private String outerField = "Outer field";

    class Inner {
        String innerField = "Inner field";

        void display() {
            System.out.println(outerField);
        }
    }

    // 추가: 외부 클래스에서 내부 클래스 객체 생성
    void createInner() {
        Inner inner = new Inner();
        inner.display();
    }
}

public class Ex1301 {
    public static void main(String[] args) {
        Outer outer1 = new Outer();
        Outer.Inner inner = outer1.new Inner();
        System.out.println(inner.innerField);

        // 추가
        Outer outer2 = new Outer();
        outer2.createInner();
    }
}

✅ 정적 내부 클래스

package section13.ex02_static;

class OuterStatic {
    private String outerInstanceField = "outer instance field";
    private static String outerStaticField = "Outer static field";

    static class InnerStatic {
        String innerInstanceField = "inner instance field";
        static String innerStaticField = "inner static field";

        // void displayInstance() {
        // System.out.println(outerInstanceField); // 인스턴스 멤버 접근 불가
        // }

        void displayStatic() {
            System.out.println(outerStaticField);
        }
    }
}

public class Ex1302 {
    public static void main(String[] args) {
        OuterStatic.InnerStatic inner = new OuterStatic.InnerStatic();
        inner.displayStatic();
        System.out.println(inner.innerInstanceField);
        System.out.println(OuterStatic.InnerStatic.innerStaticField);
    }
}