인스턴스 클래스 : 외부 클래스에 선언, 외부 클래스의 인스턴스 멤버처럼 쓰임
스태틱 클래스 : 외부 클래스에 선언, 외부 클래스의 static멤버처럼 쓰임
지역 클래스 : 외부 클래스, 초기화블럭에 선언 / 선언된 영역에서만 쓰임
익명클래스 : 클래스 선언 + 객체생성 동시에함 이름없는 클래스(일회용)
class Outer {
class InstanceInner { }
static class StaticInner { }
void method1() {
class LocalIneer { }
}
선언된 위치에 따라 유효범위, 접근성을 갖는다.
내부 클래스도 클래스기에 접근제어자, abstract 등등 붙힐 수 있다.
인스턴스 클래스는 외부클래스를 먼저 생성해야 생성가능하다.
class Outer {
class InstanceInner {}
void a () {
Outer outer = new Outer();
InstanceInner obj = outer.new InstanceInner();
}
}
외부 클래스의 지역변수는 final이 붙은 상수만 접근가능
jdk 11기준에서는 이말이 틀린듯하다.
void myMethod() {
int iv33 = 111;
final int IV33 = 222;
class LocalInner {
int iv3 = iv33;
// 에러가 나야하는데 안남
int IV3 = IV33;
}
System.out.println(iv33);
System.out.println(IV33);
}
jdk11기준으로 에러가 안난다.
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Outer.this.value // Inner클래스에서 외부클래스의 변수 출력