내부 클래스
- 클래스 in 클래스 (클래스 안에 선언한 클래스)
class Outer {
...
class Inner {
...
}
}
내부 클래스 특징
- 내부 클래스에서 외부 클래스 멤버에 접근가능
- 외부에서는 내부 클래스에 접근 불가
내부 클래스 종류
- 인스턴트 클래스 (instance class) : 바깥 클래스를 만들어야 사용할 수 있는 형태
- 정적 클래스 (static class) : 내부 클래스에 static이라는 키워드가 붙어서 바깥쪽 클래스가 만들어지지 않아도 사용할 수 있는 클래스
- 지역 클래스 (local class) : 어떤 메소드 안에 클래스가 있는 형태
- 익명 클래스 (anonymous class) : 이름을 가지지 않는 클래스, 선언과 동시에 객체 생성, 일회용 클래스
< 익명 클래스 구조 >
클래스이름 참조변수이름 = new 클래스 이름 () {
...
};
class Outer {
public void print() {
System.out.println("Outer.print");
}
class Inner {
public void innerPrint() {
Outer.this.print();
}
}
static class InnerStaticClass {
void innerPrint() {
}
}
}
abstract class Person {
public abstract void printInfo();
}
class Student extends Person {
public void printInfo() {
System.out.println("Student.printInfo");
}
}
public class Main {
public static void main(String[] args) {
Outer o1 = new Outer();
Outer.Inner i1 = new Outer().new Inner();
Outer.InnerStaticClass is1 = new Outer.InnerStaticClass();
Person p1 = new Person() {
@Override
public void printInfo() {
System.out.println("Main.printInfo");
}
};
}
}