내부 클래스

Inner Class

클래스의 내부에 또 다른 클래스를 가진 클래스. (static 멤버는 포함 할 수 없다.)
 1 class Outer {
 2     class Inner {
 3         ...
 4     }
 5 }

Outer.class, Outer$Inner.class

Outer.Inner oi = new Outer().new Inner();


Static Inner Class

내부 클래스의 안에 static 멤버를 포함할 수 있다. (외부 클래스의 비 static 멤버는 포함 할 수 없다.)
 1 class Outer {
 2     static class Inner {
 3         ...
 4     }
 5 }

Outer.class, Outer$Inner.class
 
Outer.Inner oi = new Outer.Inner();



Local Inner Class

메서드 실행시에 사용되는 클래스를 정의하는 형식으로 접근자나 지정어를 가질 수 없다.
 1 class Outer {
 2    method() {
 3        class Inner {
 4            ...
 5        }
 6    }
 7 }

Outer.class, Outer$숫자Inner.class

객체 생성은 외부에서 할 수 없다.


Anonymous Inner Class

기존 클래스의 특정 메서드를 오버라이딩하여 원하는 형태로 재정의하여 사용하는 방식. 외부 멤버중 final만 포함할 수 있다.
 1 class Inner { ... }
 2 
 3 class Outer {
 4     method() {
 5         new Inner() {
 6             ...
 7         }
 8     }
 9 }

Outer.class, Outer$숫자.class

new Inner() 자체가 객체 생성이다.

댓글

이 블로그의 인기 게시물

자바 암호화 확장 (JCE) 관련 자바 1.8.0_151 이후 변경 사항

좌표 변환: 회전 이동

HTTP POST