클래스 내부에 선언되었지만 메서드 외부에 있는 클래스를 멤버 내부 클래스라고 합니다. .
두 가지 방법으로 멤버 내부 클래스를 인스턴스화할 수 있습니다.
- 클래스 내에서 호출됨
- 클래스 외부에서 호출됨
이너 클래스 규칙
- 외부 클래스(내부 클래스를 포함하는 클래스)는 코드 내에서 원하는 만큼 내부 클래스 객체를 인스턴스화할 수 있습니다.
- 내부 클래스가 public이고 포함하는 클래스인 경우 관련 없는 다른 클래스의 코드도 내부 클래스의 인스턴스를 생성할 수 있습니다.
- 내부 클래스 객체는 외부 클래스 객체로 자동으로 인스턴스화되지 않습니다.
- 내부 클래스가 정적이면 정적 내부 클래스는 외부 클래스 인스턴스 없이 인스턴스화할 수 있습니다. 그렇지 않으면 내부 클래스 개체가 외부 클래스의 인스턴스와 연결되어야 합니다.
- 외부 클래스는 내부 클래스의 private 메소드도 호출할 수 있습니다.
클래스 내부에서 호출되는 멤버 내부 클래스
아래 예제에서는 OuterClass의 display() 메서드에서 멤버 내부 클래스의 메서드를 호출합니다.
예시
public class OuterClass {
private int value = 20;
class InnerClass {
void show() {
System.out.println("Value is: " + value);
}
}
void display() {
InnerClass ic = new InnerClass();
ic.show();
}
public static void main(String args[]){
OuterClass oc = new OuterClass();
oc.display();
}
} Value is: 20
클래스 외부에서 호출되는 멤버 내부 클래스
아래 예제에서는 OuterClass 외부, 즉 테스트 클래스에서 InnerClass의 show() 메서드를 호출합니다.
예시
class OuterClass {
private int value = 20;
class InnerClass {
void show() {
System.out.println("Value is: "+ value);
}
}
}
public class Test {
public static void main(String args[]) {
OuterClass obj = new OuterClass();
OuterClass.InnerClass in = obj.new InnerClass();
in.show();
}
} 출력
Value is: 20