중첩 클래스의 종류

  1. 정적 멤버 클래스
  2. (비정적) 멤버 클래스
  3. 익명 클래스
  4. 지역 클래스

각 중첩 클래스 살펴보기

  1. 정적 멤버 클래스
public class OuterClass {
    private static String staticField = "정적 필드";
    private String instanceField = "인스턴스 필드";

    // 정적 멤버 클래스
    public static class StaticInnerClass {
        public void display() {
            // 바깥 클래스의 정적 멤버에 접근 가능
            System.out.println(staticField);
            // 바깥 클래스의 인스턴스 멤버에 직접 접근할 수 없음
            // System.out.println(instanceField); // 오류 발생
        }
    }

    public static void main(String[] args) {
        // 정적 멤버 클래스의 인스턴스 생성
        StaticInnerClass staticInner = new StaticInnerClass();
        staticInner.display(); // 출력: 정적 필드
    }
}

2. 비정적 멤버 클래스

public class OuterClass {
    private String outerField = "바깥 클래스의 필드";

    // 비정적 멤버 클래스
    public class InnerClass {
        public void display() {
            // 바깥 클래스의 인스턴스 변수에 접근 가능
            System.out.println(outerField);
        }
    }

    public void createInnerClass() {
        // InnerClass의 인스턴스 생성
        InnerClass inner = new InnerClass();
        inner.display(); // 출력: 바깥 클래스의 필드
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.createInnerClass(); // 비정적 멤버 클래스 사용
    }
}