내부 클래스는 중첩 클래스라고도 부르며 두 클래스 멤버들 간에 서로 쉽게 접근할 수 있도록 만든 것이다. 내부 클래스는 외부 클래스의 모든 멤버들을 마치 자신의 멤버인 것처럼 사용할 수 있으며 코드의 복잡성을 줄일 수 있다.
클래스들은 상호작용을 하며 서로의 멤버 변수에 접근한다. 이 때 어떠한 클래스의 관계가 긴밀하여 내부에 클래스가 있는 것이 효율적이 때 내부 클래스를 사용한다.
class OuterClass{ // 외부클래스
class InnerClass{ // 내부클래스
//...
}
//...
}
내부 클래스를 사용하면 추가적으로 코드를 간결하게 만 들 수 있다. 하나의 클래스의 내부에 클래스를 감추어 캡슐화할 수 있게 된다.
내부 클래스는 클래스의 내부에 선언되는 클래스이므로 마치 클래스의 멤버 변수와 같이 구별된다. 선언되는 위치에 따라 인스턴스 클래스, 스태틱 클래스, 지역 클래스, 익명 클래스로 구별 된다.
Class OuterClass{
class InnerInstance{}
}
class OurterClass{
static class InnerStatic{}
}
class OuterClass{
void A(){
class InnerLocal{}
}
}
내부 클래스도 클래스이기 때문에 선언부에 제어자를 사용한다.
Class OuterClass{
abstract class InnerInstance{
//...
}
}
내부 클래스는 멤버변수와 같이 다루어지기 때문에 접근제어자(private, protected)를 사용한다.
Class OuterClass{
private class InnerInstance{
//...
}
protected class InnerInstance2{
//...
}
}
익명 클래스 또는 무명 클래스는 말 그대로 이름이 없는 클래스 이다.
class Some{
private int a = 3;
int getter(){
return this.a;
}
void setter(int a){
this.a = a;
}
}
Some anony = new Some() {
private int a = 10;
int getter(){
return this.a;
}
void setter(int a){
this.a = a;
}
}; // 세미콜론 주의