2016-06-19 6 views
2

이의 내가 이런 클래스가 있다고 가정 해 봅시다 있습니까 : 내부 클래스는 개인이기 때문에, 위의 코드에서개인 내부 클래스에 액세스 한정자를 선언 할 필요가

public class OuterClass { 
    //... 
    private class InnerClass { 
    private int x; // This variable makes sense 
    public int y; // Is there any use for this? 
    } 
} 

을, 바깥 쪽 클래스는 액세스 할 수 있습니다 모든 변수, 사적인 변수까지 내부 클래스 자체는 다른 클래스에서는 보이지 않지만 둘러싸는 외부 클래스에서는 볼 수 없습니다.

위의 변수 y이 공개되어 있어도 외부 클래스가 아닌 다른 클래스에서는 액세스 할 수 없습니다.

개인 내부 클래스의 모든 액세스 수정자는 기본적으로 개인용으로 보입니다.

그래서 내부 클래스의 멤버에 대해 액세스 한정자를 전혀 선언 할 이유가 있습니까?

+1

'public class InnerClass2 extends InnerClass {}'(비록 이것을 권장하지 않지만) – fabian

+0

@ fabian과 그게 무슨 일을합니까? InnerClass2는 여전히 'InnerClass'의 공개 및 비공개 필드 모두에 액세스 할 수 있습니다. – Kingamere

+1

이렇게하면 슈퍼 클래스의'public' 멤버에 대한 액세스를 제공하는'InnerClass'의'public' 서브 클래스의 인스턴스를 생성 할 수 있습니다. 비록 실제 사용 사례를 생각할 수 없다 ... – fabian

답변

0

액세스 수정자가 중요한 경우는 수퍼 클래스 메소드 (예 : toString())를 재정의하는 메소드에 대한 것입니다. 재정의 된 메서드의 가시성을 줄일 수는 없습니다. 클래스를 컴파일하려면 항상 toString()을 public으로 선언해야합니다.

외부 클래스에서 전용 멤버에 액세스하면 컴파일러에서 합성 메서드를 만듭니다. 이 합성 메소드는 중첩 클래스의 .class 파일에서만 볼 수 있습니다.

내부 수정 자체가 개인이 아닌 경우 액세스 수정 자 범위가 중요한 또 다른 경우입니다.