Thilo는 첫 번째 질문 인 "어떻게 가능합니까?" 에 대한 좋은 답변 을 추가했습니다 . 두 번째 질문에 대해 좀 더 자세히 설명하겠습니다. 왜이 동작이 허용됩니까?
우선,이 동작이 정적 클래스가 아닌 중첩 클래스 인 내부 클래스로 제한되지 않는다는 것을 완벽하게 분명히합시다. 이 동작은 정적이어야하고 둘러싸는 인스턴스를 가질 수없는 중첩 된 열거 형 및 인터페이스를 포함하여 모든 중첩 된 유형에 허용됩니다. 기본적으로이 모델은 다음 문장으로 단순화됩니다. 중첩 코드는 코드를 둘러싸는 모든 권한을 가지며 그 반대도 마찬가지입니다.
그럼 왜? 예제가 그 요점을 더 잘 설명한다고 생각합니다.
몸과 뇌를 생각하십시오. 헤로인을 팔에 주사하면 뇌가 높아집니다. 예를 들어 말벌과 같이 뇌의 편도 영역이 개인의 안전에 위협이된다고 생각하는 것을 보면, 몸을 다른 방향으로 돌리고 언덕을 두 번 "생각"하지 않고도 언덕을 향해 달리게 할 것입니다.
따라서 뇌는 신체의 본질적인 부분이며 이상하게도 그 반대의 경우도 마찬가지입니다. 밀접하게 관련된 엔터티 간의 액세스 제어를 사용하면 관계에 대한 주장을 상실하게됩니다. 액세스 제어가 필요한 경우 클래스를 더 뚜렷한 단위로 분리해야합니다. 그때까지는 같은 단위입니다. 추가 연구의 추진 사례는 Java가 Iterator
일반적으로 구현 되는 방식을 살펴 보는 것 입니다.
둘러싸는 코드에서 중첩 된 코드로의 무제한 액세스는 대부분 중첩 된 유형의 필드 및 메소드에 액세스 수정자를 추가하는 데 쓸모가 없습니다. 그렇게하면 혼란이 가중되고 Java 프로그래밍 언어의 새로운 사용자에게 잘못된 안전감을 제공 할 수 있습니다.