2013-09-27 5 views
0

이것은 분명히 RTFM인데, 어떻게 든 그것을 설명하는 간결한 소스를 찾지 못했습니다.공개 클래스의 개인 내부 클래스의 가시성

public class Outer { 

    private class Inner { 

    } 

} 

개인 클래스 Inner공공 클래스 Outerinner 클래스입니다.

내 질문에 대한 가시성 외부`외부에서 Inner '입니다.

  1. 다른 클래스에서 Inner을 인스턴스화 할 수 있습니까? 그렇다면 제한이 있습니까 (이 클래스가 같은 패키지에있는 것 등)?

  2. Inner은 컬렉션을 사용할 때 콘크리트 유형으로 사용할 수 있습니까? 예를 들어 ArrayList <Inner>을 다른 클래스에 선언 할 수 있습니까?

  3. 는 다른 클래스 extends OuterInner는 위의 질문의 관점에서 함께 올 경우?

+1

외부에서 인스턴스를 만들 수 없습니다. 해당 클래스가 최상위 클래스에서 상속 된 경우 참조가있을 수 있습니다. 그런 다음 내부 클래스의 개체를 사용할 수는 있지만 여전히 캐스팅 할 수는 없습니다. 아이디어는 자신의 수업에서 내부적으로 사용하는 것입니다. 배열을 반환하면 어떤 동작이 될지 잘 모르겠습니다. 시도해 보겠습니다. – porfiriopartida

+0

내부 클래스 선언에서()를 제거하십시오. – porfiriopartida

답변

2

"FM"은이 경우 Java 언어 사양입니다.

을 그렇지 않으면, 구성원 또는 생성자는 다음 액세스하는 경우 허용하고 최상위 클래스의 신체 내에서 발생하는 경우에만 (§7.6) 즉의 선언을 둘러싸고, 개인 선언 된 경우 : 당신은 포함 section 6.6.1합니다 멤버 또는 생성자.

은 그래서 생성자는하지만 다른 곳 어디서나 ( Outer 선언 다른 중첩 된 클래스 내에 포함) Outer의 선언 내에서 호출 할 수 있습니다. 액세스는 상속되지 않습니다. 생성자를 호출하려고하는 소스 코드가 소스 코드 Outer 내에 있는지 여부만큼 간단합니다.

5

인너는 개인이므로, 오직 부모 인 외부 만이 아무 것도 할 수 없습니다.

+0

그만큼 간단합니다. –