내부 클래스 용도

|
http://thdwns2.springnote.com/pages/539147

1. 인스턴스 내부 클래스
Ex0608.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Outer {
	int outData = 100;
	class Inner {
		public void printInner() {
			System.out.println(outData);
		}
	}
}

public class Ex0608 {
	public static void main(String args[]) {
		Outer out = new Outer();
		Outer.Inner in = out.new Inner();
		in.printInner();
	}
}

2. static 내부 클래스
원래 클래스 앞에는 static이 붙을 수 없다. 하지만 내부 클래스일 경우는 데이터 타입처럼 사용되기 때문에 가능한데 의미는 Outer 클래스의 인스턴스가 없어도 생성 가능한 내부 클래스라는 것이다. static이므로 이미 Outer 클래스 생성시에 정의되어 있는 상태이다. 
Ex0609.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Outer {
	static int outStaticData = 100;
	static class Inner {
		public void printInner() {
			System.out.println(outStaticData);
		}
	}
}

public class Ex0609 {
	public static void main(String args[]) {
		Outer.Inner in = new Outer.Inner();
		in.printInner();
	}
}

3. 지역 클래스
Ex0610.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Outer {
	int outData = 100;
	Object outerMethod() {
		final int localFinalData = 200;
		class Inner extends Object {
			public String toString() {
				return "내부 클래스의 메소드 : " + outData + 
				", " + localFinalData;
			}
		}
		return new Inner();
	}
}
public class Ex0610 {
	public static void main(String args[]) {
		Outer out = new Outer();
		Object obj = out.outerMethod();
		System.out.println(obj.toString());
	}
}

4. 내부 무명 클래스
Ex0611.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Outer {
	int outData = 100;
	
	Object outerMethod() {
		final int localfinalData = 200;
		
		return (new Object() {
			public String toString() {
				return "내부 클래스의 메소드 : " + outData + 
				" " + localfinalData;
			}
		});
	}
}
public class Ex0611 {
	public static void main(String[] args) {
		Outer out = new Outer();
		Object obj = out.outerMethod();
		System.out.println(obj.toString());
	}
}

'Java' 카테고리의 다른 글

Exception  (0) 2010.08.23
자바 주요 클래스  (0) 2010.08.19
static vs final  (0) 2010.08.17
주민등록번호 추출  (0) 2010.08.16
자바 소수점 출력  (0) 2010.08.13
And