2. 클래스의 맴버 위치에 정의할 수도 있고, 로컬 변수처럼 메소드 바디에 정의할수 있다.
메소드 바디에 정의된 클래스를 로컬 클래스라고 부른다.
3. 로컬클래스는 final 변수만 엑세스할 수 있다.
4. 중첩클래스는 독립 객체 형태로 존재할 수 없다.
ex)
일반 중첩 클래스
public class A {
private a;
class B {
public void c() {
a++; // 아웃터클래스의 맴버를 자유롭게 접근할 수 있다.
}
}
void aa() {
}
}
객체생성 방법
A outer = new A();
A.B b = outer.new B(); d반드시 바깥 클래스의 객체를 생성한 뒤 안쪽 클래스의 객체를 생성할 수 있다.
로컬 클래스
일반 로컬 변수는 스택 메모리에 입력되므로 Nested class는 참조가 불가능 하다 하지만 final 변수는 heap영역에 저장되기 때문에( heap 영역의 final pool 이라는 지정 영역에 저장) 참조가 가능하다.
public class A {
private a;
public void makeClassB(int localValue) {
final int integer=0;
class B { //로컬 클래스는 접근 지정자가 없다.
public void c() {
a++; // 아웃터클래스의 맴버를 자유롭게 접근할 수 있다.
interger++; // final 변수는 접근 가능하다.
localValue // 일반 로컬변수는 접근일 불가능하다 , 컴파일에러!
}
}
}
* 중첩클래스는 바깥 클래스와 함께 컴파일된다. Outer 클래스에 Nested 클래스가 중첩되어 있다면
Nested 클래스는 Outer$Nested.class 라는 파일명을 가지게 된다.
'Programming > JAVA' 카테고리의 다른 글
JAVA Collection API (0) | 2010.02.23 |
---|---|
JAVA String 과 StringBuffer (0) | 2010.02.23 |
JAVA 추상메소드 & 인터페이스 (0) | 2010.02.22 |
JAVA main() 메소드가 public static인 이유. (0) | 2010.02.21 |
JAVA Wrapper 클레스 , static 키워드 (0) | 2010.02.19 |