클래스 내부에 선언되었지만 메서드 외부에 있는 클래스를 멤버 내부 클래스라고 합니다. .
두 가지 방법으로 멤버 내부 클래스를 인스턴스화할 수 있습니다.
- 클래스 내에서 호출됨
- 클래스 외부에서 호출됨
이너 클래스 규칙
- 외부 클래스(내부 클래스를 포함하는 클래스)는 코드 내에서 원하는 만큼 내부 클래스 객체를 인스턴스화할 수 있습니다.
- 내부 클래스가 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