📋 내부 클래스
✅ 내부 클래스 유형
- 인스턴스 내부 클래스
- 정적 내부 클래스
- 지역 내부 클래스
- 익명 내부 클래스
✅ 인스턴스 내부 클래스
- 외부 클래스 객체가 생성된 상태에서 객체 생성할 수 있음.
- 외부 클래스의 인스턴스 변수와 메서드에 접근 가능.
package section13.ex01_instance;
class Outer {
private String outerField = "Outer field";
class Inner {
String innerField = "Inner field";
void display() {
System.out.println(outerField);
}
}
// 추가: 외부 클래스에서 내부 클래스 객체 생성
void createInner() {
Inner inner = new Inner();
inner.display();
}
}
public class Ex1301 {
public static void main(String[] args) {
Outer outer1 = new Outer();
Outer.Inner inner = outer1.new Inner();
System.out.println(inner.innerField);
// 추가
Outer outer2 = new Outer();
outer2.createInner();
}
}
✅ 정적 내부 클래스
- 주로 외부 클래스의 static 메서드에서 사용될 목적으로 선언.
- 외부 클래스의 인스턴스 멤버에는 접근할 수 없고, 정적 멤버에만 접근할 수 있음.
package section13.ex02_static;
class OuterStatic {
private String outerInstanceField = "outer instance field";
private static String outerStaticField = "Outer static field";
static class InnerStatic {
String innerInstanceField = "inner instance field";
static String innerStaticField = "inner static field";
// void displayInstance() {
// System.out.println(outerInstanceField); // 인스턴스 멤버 접근 불가
// }
void displayStatic() {
System.out.println(outerStaticField);
}
}
}
public class Ex1302 {
public static void main(String[] args) {
OuterStatic.InnerStatic inner = new OuterStatic.InnerStatic();
inner.displayStatic();
System.out.println(inner.innerInstanceField);
System.out.println(OuterStatic.InnerStatic.innerStaticField);
}
}