□ 내부 클래스는 클래스 내부에 다른 클래스를 정의 하는 것, Nested Class(중첩 클래스)라고도 함
Static Inner Class or Nested Top Level Class(정적 클래스)의 특징
|
1. 외부 클래스의 이름과 달라야 함
2. 접근 제한자를 선언 할 수 있다.
3. static 제한자로 선언된 클래스이며 자동적으로 top-level 클래스가 됨
4. 외부 클래스에 static 제한자로 선언된 멤버들만 접근 할 수 있음
5. 외부 클래스의 인스턴스 없이 접근할 수 있다.
6. 접근 제한자가 선언될 수도 있다.
7. static 제한자가 선언된 멤버나 그렇지 않은 멤버 모두 선언될 수 있음
8. 인터페이스를 구현하거나 클래스를 확장할 수 있음
9 interface(인터페이스)로 implement(구현)시 묵시적으로 static으로 선언
|
Member Inner Class, Non-Static Inner Class(멤버 클래스)의 특징
|
1. 외부 클래스의 이름과 달라야 함
2. static 제한자로 선언되지 않아야 함
3. 클래스의 멤버로 선언해야 함
4. 접근 제한자를 선언할 수 있음
5. static 제한자로 선언된 멤버들을 선언할 수 없다.
6. 외부 클래스의 인스턴스를 통해 접근해야 한다.
7. 외부 클래스의 모든 멤버에 접근할 수 있다.
8. 인터페이스를 구현하거나 클래스를 확장할 수 있다.
|
Local Inner Class(지역 클래스)의 특징
|
1. 외부 클래스의 이름과 달라야 함
2. 블록 내 (생성자, 메소드 등)에 선언해야 함
3. static 제한자가 선언될 수 없다.
4. 접근 제한자가 선언될 수 없다.
5. static member(정적 멤버)를 선언할 수 없다.
6. 클래스가 선언된 외부에서는 참조할 수 없다.
7. Nonstatic(비정상적인) 블록에 포함되었을 경우에는 블록 내에 선언된 상수와 외부 클래스의 모든 멤버를 참조 할 수 있다.
8. static 블록에 포함되었을 경우에는 블록 내에 선언된 상수와 외부 클래스의 정적 멤버만을 참조할 수 있다.
9. 인터페이스를 구현하거나 클래스를 확장할 수 있다.
|
Anonymous Inner Class(익명 클래스)의 특징
|
1. 객체를 한 번만 생성하기 때문에 클래스 선언부를 가지지 않는다.
2. 생성자를 가질 수 없다.
3. static(정적) 멤버를 가질 수 없다.
4. implements 키워드를 이용해 인터페이스를 구현 할 수 없다.
5. extends 키워드를 이용해 클래스를 확장할 수 없다.
6. 인터페이스나 클래스를 구현하거나 확장할 수 있다.
7. abstract 클래스를 상속받을 수 있다.
8. 멤버로서 선언되었을 경우에는 멤버 클래스의 특징을 갖는다.
9. 블록 내에 선언되었을 경우에는 지역 클래스의 특징을 갖는다.
|
□ Outer 클래스 내에서 객체를 생성하는 방법
① Outer o = new Outer();
Inner i = o.new Inner();
② Outer o = new Outer();
Outer.Inner i = o.new Inner();