중첩 클래스(Nested Class)
- 두개의 클래스가 밀접한 관계에 있는 경우 사용 - 이벤트 처리 프로그램 작성시 사용
- 클래스의 캡슐화를 강화할 목적으로 중첩클래스 선언
객체 내부 클래스(Instance Inner Class)
- 객체 내부클래스는 컴파일되면 [외부클래스$내부클래스.class] 파일로 생성
- 외부클래스의 객체에 종속되어 사용되는 클래스 - 외부클래스에서만 사용 가능한 클래스
- 객체 내부클래스의 메소 드에서는 외부클래스의 객체를 참조해 필드 또는 메소드를 접근 제한자에 상관없이 직접 참조하여 사용 가능
OuterOne
public class OuterOne {
private int outerNum;
public OuterOne() {
}
public OuterOne(int outerNum) {
super();
this.outerNum = outerNum;
}
public int getOuterNum() {
return outerNum;
}
public void setOuterNum(int outerNum) {
this.outerNum = outerNum;
}
public void outerDisplay() {
System.out.println("outerNum = " + outerNum);
}
public class InnerOne {
private int innerNum;
public InnerOne() {
}
public InnerOne(int innerNum) {
super();
this.innerNum = innerNum;
}
public int getInnerNum() {
return innerNum;
}
public void setInnerNum(int innerNum) {
this.innerNum = innerNum;
}
public void innerDisplay() {
System.out.println("innerNum = " + innerNum);
System.out.println("outerNum = " + outerNum);
outerDisplay();
}
}
}
OuterOneApp
public class OuterOneApp {
public static void main(String[] args) {
OuterOne outerOne = new OuterOne(100);
outerOne.outerDisplay();
System.out.println("==============================================================");
InnerOne innerOne = outerOne.new InnerOne(200);
innerOne.innerDisplay();
System.out.println("==============================================================");
}
}