내부 클래스 (inner class)
class A { //B의 외부 클래스
class B { //A의 내부 클래스
//객체 생성 없이도 A의 멤버 접근 가능
}
}
예제
class A { // A는 B의 외부 클래스
int i = 100;
B b = new B();
class B { // B는 A의 내부 클래스
void method() {
A a = new A():
System.out.println(a.i);
System.out.println(i); //객체 생성 없이 외부 클래스의 멤버 접근 가능
}
}
}
class C { // B 못 씀
B b = new B();
}
public class InnerTest {
public static void main(String[] args) {
B b = new B();
b.method();
}
}
내부 클래스의 종류와 특징
| 내부 클래스 | 특징 |
|---|---|
| 인스턴스 내부 클래스(instance class) | 외부 클래스의 멤버 변수 선언위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다. |
| 스태틱 내부 클래스(static class) | 외부 클래스의 멤버 변수 선언 위치에 선언하며, 외부 클래스의 static 멤버처럼 다루어진다. 주로 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언된다. |
| 지역 내부 클래스(local class) | 외부 클래스의 메서드나 초기화 블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다. |
| 익명 내부 클래스(anonymous class) | 클래스의 선언과 객체의 생성을 동시에 하는 이름 없는 클래스(일회용) |