728x90
내부 클래스에서 외부 클래스의 멤버들에 쉽게 접근 가능 및 코드의 복잡성 감소
클래스는 접근제어자가 default와 public만 가능하지만
내부 클래스는 모든 접근 제어자가 가능
class A {
int i = 10;
static int c = 15;
class B {
//객체 생성 없이 A 클래스의 멤버 접근 가능
void pri() {
System.out.println(i); // 출력가능
System.out.println(c); // 출력가능
}
}
static class C {
void static_pri() {
System.out.println(i); // 출력불가능
System.out.println(c); // 출력가능
}
}
void methodA() {
final int x= 5; // 외부 클래스의 지역 변수는 final(상수)에만 접근 가능
int t = 3; // 값이 변하지 않는다면 상수 취급이라 final 생략 가능하지만
int t = 2; // 이렇게 나중에 값이 바뀐다면 상수 취급을 못받아 오류 발생
class D {
System.out.println(i); //출력가능
System.out.println(c); //출력가능
System.out.println(x); //출력가능
System.out.println(t); //출력불가능
}
}
}
public class Main {
public static void main() {
// 인스턴스 내부 클래스는 외부 클래스를 먼저 인스턴스 생성한 뒤에 사용가능
A a = new A(); // 외부 클래스 먼저 인스턴스 생성
A.B b = a.new B(); // 외부 인스턴스를 통해 내부 인스턴스 생성
// 스태틱 내부 클래스는 외부 클래스 생성 없이 바로 사용가능
A.C c = new A.C();
}
}