한 곳에서만 사용되는 클래스를 논리적으로 그룹화하는 방법입니다 . 한 클래스가 다른 한 클래스에 유용하면 그 클래스에 클래스를 포함시키고 두 클래스를 함께 유지하는 것이 논리적입니다. 이러한 “헬퍼 클래스”를 중첩하면 패키지가보다 간결 해집니다.
그것은 캡슐화를 증가시킵니다 . A와 B라는 두 개의 최상위 클래스를 고려하십시오. 여기서 B는 선언되지 않으면 A의 멤버에게 액세스해야합니다 private. A 클래스 내의 B 클래스를 숨김으로써 A 멤버는 비공개로 선언 될 수 있고 B 멤버는 비공개로 선언 될 수 있습니다. 또한 B 자체는 외부 세계로부터 숨길 수 있습니다.
보다 읽기 쉽고 유지 보수가 쉬운 코드로 이어질 수 있습니다 . 최상위 클래스의 작은 클래스를 중첩하면 코드가 사용되는 위치에 가깝게 배치됩니다.
정적 중첩 클래스
클래스 메소드 및 변수와 마찬가지로 정적 중첩 클래스는 외부 클래스와 연관됩니다. 정적 클래스 메소드와 마찬가지로 정적 중첩 클래스는 객체 클래스 또는 객체 클래스에 정의 된 메소드를 직접 참조 할 수 없으며 객체 참조를 통해서만 사용할 수 있습니다.
정적 중첩 클래스는 다른 최상위 클래스와 마찬가지로 외부 클래스 (및 다른 클래스)의 인스턴스 멤버와 상호 작용합니다. 실제로, 정적 중첩 클래스는 행동 상으로는 패키징 편의를 위해 다른 최상위 클래스에 중첩 된 최상위 클래스입니다.
Static Nested Classes
1 2 3
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
public String getNumber(){ return formattedPhoneNumber; }
// Valid in JDK 8 and later:
// public void printOriginalNumbers() { // System.out.println("Original numbers are " + phoneNumber1 + // " and " + phoneNumber2); // } }
PhoneNumber myNumber1 = new PhoneNumber(phoneNumber1); PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2);
// Valid in JDK 8 and later:
// myNumber1.printOriginalNumbers();
if (myNumber1.getNumber() == null) System.out.println("First number is invalid"); else System.out.println("First number is " + myNumber1.getNumber()); if (myNumber2.getNumber() == null) System.out.println("Second number is invalid"); else System.out.println("Second number is " + myNumber2.getNumber());