Nested Class(중첩 클래스)는 또 다른 클래스 내부에 정의된 클래스를 말합니다. Inner class라고 하기도 하지만 보통 Nested class라고 한다고 합니다.(교수님 피셜)
이때 또 다른 클래스를 Outer Class(외부 클래스), 그 안에 정의된 클래스를 Nested Class(중첩 클래스)라고 합니다.
// 관계도 그려서 넣기
//1, 3 예시 그림 그려서 넣기
외부 클래스 내부에 Static없이 비정적으로 정의하는 중첩 클래스입니다. 이런 클래스들을 Inner Class(내부 클래스), Non-Static Member Class(비정적 멤버 클래스)라고 합니다. 칭하는 말이 여러가지여서 저도 놀랐습니다.. 저는 내부 클래스라고 하겠습니다.
Local Inner class와 Anoymous inner class도 여기에 속하기는 하지만 보통 내부 클래스라고 하면 Local Inner class와 Anoymous inner class을 제외한 내부 클래스를 말하는 것입니다.
public class OuterClass {
private int num = 8;
public class InnerClass{
public int inner_num = 7;
}
InnerClass inner = new InnerClass();
}
이렇게 외부 클래스 내에 static 없이 클래스를 정의하면 됩니다.
public class OuterClass {
private int num = 8;
public class InnerClass{
//생략
}
InnerClass inner = new InnerClass();
}
public class OuterClass2 {
public void main(String[] avg){
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
}
}
public class OuterClass {
private int num = 8;
public class InnerClass{
public int inner_num = 7;
public int inner_num2 = num; // 직접 access 가능
}
}
public class OuterClass {
private int num = 8;
public class InnerClass{
public int inner_num = 7;
public int num; // 변수 이름을 같도록 하면 inner class의 변수를 가리키게 됨. 이 상태에서 바깥의 것을 가리킬 수는 없을까?
public int inner_num2 = num; // 내부 클래스의 num이 assign된다.
public int inner_num3 = OuterClass.this.num; // 이렇게 하면 외부 클래스의 num을 가져옴.
}
}
public class OuterClass {
private int num = 8;
public class InnerClass{
public int inner_num = 7;
}
InnerClass inner = new InnerClass();
public static void getInner_num(OuterClass outerClass){//파라미터로 외부 클래스 객체의 레퍼런스 변수를 받고 있습니다.
outerClass.num = outerClass.inner.inner_num;
}
}