본문 바로가기

Programming/JAVA

JAVA 중첩클래스 ( Nested Class )


1. 중첩 클래스는 클래스 내부에 또 다른 클래스를 정의하는 것이다.

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