Java-Inner Class


종류 특징
instance class 1. 외부 클래스의 멤버변수 선언위치에 선언
2. 외부 클래스의 인스턴스멤버처럼 다루어짐
3. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언
static class 1. 외부 클래스의 멤버변수 선언위치에 선언
2. 외부 클래스의 static멤버처럼 사용됨
3. 주로 외부 클래스의 static멤버, static 메서드에서 사용될 목적으로 선언
local class 1. 외부 클래스의 메서드나 초기화블럭 안에 선언
2. 선언된 영역 내부에서만 사용
anonymous class 1. 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스


// 외부 클래스
class Outer {
    // 내부 클래스
    class Inner {
        int iv = 100;
    }

    // 스태틱 내부 클래스
    static class StaticInner {
        int iv = 200;
    }

    // 외부 클래스의 멤버변수
    int value = 10;

    // 내부 클래스2
    class Inner2 {
        // 내부 클래스2 멤버변수
        int value = 20;

        // 내부 클래스2 함수
        void method1() {
            // 함수의 지역변수
            int value = 30;
            System.out.println(value);
            System.out.println(this.value);
            System.out.println(Outer.this.value);
        }
    }
}

public class ExampleInnerClass {
    public static void main(String[] args) {
        // static class 가 아닌 경우 외부 클래스의 인스턴스를 먼저 생성한다.
Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); System.out.println(inner.iv);

        // 스태틱 내부 클래스는 외부 클래스를 먼저 생성하지 않아도 됨
        Outer.StaticInner staticInner = new Outer.StaticInner();
        System.out.println(staticInner.iv);

        // 내부 클래스2 호출
        Outer.Inner2 inner2 = outer.new Inner2();
        inner2.method1();

        Frame f = new Frame();
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                e.getWindow().setVisible(false);
                e.getWindow().dispose();
                System.exit(0);
            }
        });
    }
}
참고도서 : 자바의 정석

댓글

이 블로그의 인기 게시물

이클립스 오류 - 프로젝트 폴더가 열리지 않는 경우

Subversion (SVN) 설치 및 다중 저장소 설정 가이드

MySQL Root 비밀번호 재설정하기: 완벽한 가이드