class Outer {
static class StaticNestedClass {
// static 으로 선언된 변수만 static 내부 클래스 내부에서 사용할 수 있다.
}
class Inner {
...
}
}
내부 클래스는 다음과 같은 종류가 있다.
타입 |
선언 방법 |
범위 |
내부 접근 |
정적 내부 클래스 |
static nested class |
클래스 내 멤버 |
No |
일반 내부 클래스 |
inner [non-static] class |
클래스 내 멤버 |
Yes |
내부 클래스 |
local [inner] class |
클래스 내 메서드 내부 |
Yes |
익명 클래스 |
anonymous [inner] class |
클래스 내 메서드 내부 |
Yes |
일반 내부 클래스(또는 내부 클래스)는 자신을 둘러싼 일반 클래스(또는 Top Level 클래스)가 인스턴스화되지 않으면, 일반 내부 클래스 역시 인스턴스화할 수 없다.
일반 내부 클래스는 탑레벨 클래스내 모든 멤버의 접근이 가능하다. 따라서 접근을 제한시킬 필요가 있는데, 정적 내부 클래스를 사용하는 목적은 특정클래스나 메서드의 접근을 제한하기 위해서 사용한다.
정적 내부 클래스는 탑레벨 클래스의 내부 클래스로 인식하지만 일반 클래스와 동일하며, 탑레벨 클래스 내부 또는 외부에 존재할 수 있다. 별도 독립된 클래스로 만들어 사용할 수 있는데도 불구하고 내부 클래스로 만드는 이유는 관리와 가독성을 강화하기 위해서 이다.
정적 내부 클래스 생성
// Outer 클래스 외부에서 사용시 다음과 같이 사용하여 생성
Outer.SaticNestedClass i = new Outer.StaticNestedClass();
// Outer 클래스 내부에서는 다음과 같이 생성
StaticNestedClass i = new Outer.StaticNestedClass();
익명 클래스는 탑레벨 클래스를 상속받은 클래스에서 메서드 오버라이드 하여 클래스를 재정의 할 수 있는 내부 클래스를 말한다.
[JAVA]자바 환경 설정(JDK) (1) | 2016.07.09 |
---|---|
[Java]File 클래스 (0) | 2012.10.01 |
[Java]Random Aceess (0) | 2012.09.30 |
[Java] 직렬화 대상에서 제외 transient (0) | 2012.09.29 |
[Java]ObjectInputStream & ObjectOutputStream (0) | 2012.09.29 |
댓글 영역