중첩 클래스는 클래스 내부에 다른 클래스를 선언하는 것을 말합니다.
정적 중첩 클래스(Static Nested Class)
정적 중첩 클래스는 외부 클래스 내에 static 제한자로 선언한 클래스를 말하며 아래처럼 작성할 수 있다.
1. 정적중첩 클래스는 외부 클래스의 멤버로 선언해야 한다.
2. 정적 중첩 클래스는 static 제한자로 선언되어야 한다.
3. 정적 중첩 클래스는 top-level 클래스와 같은 속성을 갖는다.
4. 정적 중첩 클래스는 top-level 클래스와 같은 속성을 갖는다.
5. 정적 중첩 클래스는 외부 클래스의 인스턴스 없이 접근할 수 있다.
6. 정적 중첩 클래스 내부에 정적 멤버static meber와 비정적 멤버 non-static member 모두 선언할 수 있다.
7. 정적 중첩 클래스는 인터페이스를 구현하거나 클래스를 확잘할 수 있다.
public class OuterClass{
public static class NestClass{
public void outprint(){
System.out.println("Nested Class");
}
}
public static void main(String[] args){
NestedClass nc = new NestedClass();
nc.print();
}
}
멤버 내부 클래스(Member Inner Class)
내부 클래스는 외부 클래스 내에 static 제한자로 선언하지 않은 클래스를 말합니다.
1.멤버 내부 클래스는 외부 클래스의 멤버로 선언해야 한다.
2. 멤버 내부 클래스는 static 제한자로 선언하지 않아야 한다.
3. 멤버 내부 클래스에 접근 제한자를 선언할 수 있다.
4. 멤버 내부 클래스 내부에 정적 멤버 static member를 선언할 수 있다.
5. 멤버 내부 클래스는 외부 클래스의 인스턴스를 통해 접근할 수 있다.
6. 멤버 내부 클래스 내부에서 외부 클래스의 모든 멤버에 접근할 수 있다.
7. 멤버 내부 클래스는 인터페이스를 구현하거나 클래스를 확잘할 수 있다.
public class OuterClass{
public static class InClass{
public void outprint(){
System.out.println("InClass");
}
}
public static void main(String[] args){
OuterClass oc = new OuterClass();
OuterClass.inClass ic = oc.new InClass();
}
}
지역 내부 클래스(Local Inner Class)
지역 내부 클래스는 블록(메소드, 생성자 등) 내에 선언한 클래스를 말하며 아래처럼 작성할 수 있다.
1. 지역 내부 클래스는 블록(메소드, 생성자 등) 내에 선언해야 한다.
2. 지역 내부 클래스에 static 제한자를 선언할 수 없다.
3. 지역 내부 클래스에 접근 제한자를 선언할 수 없 다.
4. 지역 내부 클래스 내부에 정적 멤버(static member)를 선언할 수 없다.
5. 지역 내부 클래스가 선언된 블록 외부에서는 접근할 수 없다.
6. 지역 내부 클래스가 비정적 블록에 포함되었을 경우에는 블록 내에 선언된 상수와 외부 클래스의 모든 멤버를 참조할 수 있다.
7. 지역 내부 클래스가 정적 블록에 포함되었을 경우에는 블록 내에 선언된 상수와 외부 클래스의 정적인 멤버만은 참조할 수 있다.
8. 지역 내부 클래스는 인터페이스를 구현하거나 클래스를 확장할 수 있다.
public class OuterClass{
public void method(){
class InnerClass{
public void print(){
System.out.println("LocalClass")
}
}
InnerClass ic = new InnerClass();
ic.print();
}
public static void main(String[] args){
OuterClass oc = new OuterClass();
oc.method();
}
}
익명 내부 클래스
익명 내부 클래스는 클래스의 선언부를 제외하고 구현부만 정의한 크래스를 말하며 아래처럼 작성할 수 있다.
1.익명 내부 클래스는 객체를 한 번만 생성하기 때문에 클래스 선언부를 가지지 않는다.
2. 익명 내부 클래스는 생성자를 가질 수 없다.
3. 익명 내부 클래스는 정적(static)멤버를 가질 수 없다.
4. 익명 내부 클래스는 implements키워드를 이용해 인터페이스를 구현할 수 없다.
5. 익명 내부 클래스는 extends 키워드를 이용해 클래스를 확장할 수 없다.
6.익명 내부 클래스는 인터페이스나 클래스를 구현하거나 확장할 수 있다.
7.익명 내부 클래스는 abstract 클래스를 상속받을 수 있다.
8. 익명 내부 클래스는 멤버로서 선언되었을 경우에는 멤버 클래스의 특징을 갖는다.
9. 익명 내부 클래스는 블록 내에 선언되었을 경우에는 지역 클래스의 특징을 갖는다.
public class OuterClass{
public static void main(String args[]){
foo();
}
public static void foo(){
new InnerClass() {
public void test1(){
System.out.println("Anonymous Class");
}
}.test2();
}
}
class InnerClass{
public void test2() {
System.out.println("Anonymous Inner Class2");
}
}
'컴퓨터프로그래밍 > JAVA' 카테고리의 다른 글
JAVA - java.lang 패키지2 (0) | 2013.10.09 |
---|---|
JAVA - java.lang 패키지 (0) | 2013.10.08 |
JAVA 가비지 컬렉션 (2) | 2013.10.06 |
JAVA연산자 (0) | 2013.10.05 |
JAVA - 기타 제한자. (0) | 2013.10.04 |