2009-02-27 5 views
11

누군가가 내게 어떤 차이를 설명해 줄 수 있습니까? protected/public내부 클래스 사이의 차이점은 무엇입니까?protected/public 내부 클래스

나는 public 내부 클래스가 가능한 한 많이 피하는 것을 알고있다. (이 article에서 설명했다).

그러나 내가 알 수있는 바로는 protected 또는 public 수식어를 사용하는 경우에는 차이가 없습니다.

이 예를 살펴 보자

public class Foo1 { 
public Foo1() { } 

protected class InnerFoo { 
    public InnerFoo() { 
    super(); 
    } 
} 
} 

을 ...

public class Foo2 extends Foo1 { 
public Foo2() { 
    Foo1.InnerFoo innerFoo = new Foo1.InnerFoo(); 
} 
} 

...

이 모든 컴파일 및 유효
public class Bar { 
public Bar() { 
    Foo1 foo1 = new Foo1(); 
    Foo1.InnerFoo innerFoo1 = foo1.new InnerFoo(); 

    Foo2 foo2 = new Foo2(); 
    Foo2.InnerFoo innerFoo2 = foo2.new InnerFoo(); 
} 
} 

내가 InnerFooprotected를 선언 여부 또는 public.

무엇이 누락 되었습니까? protected 또는 public을 사용할 때 차이가있는 경우를 알려주십시오.

감사합니다.

답변

19

액세스 수정자는 동일한 패키지 및 하위 클래스 이외의 클래스에서 액세스를 제한합니다.

표시된 예에서 동일한 패키지에있는 것처럼 publicprotected은 동일한 효과를 갖습니다.

액세스 수정 자에 대한 자세한 내용은 Controlling Access to Members of a Class 페이지의 The Java Tutorials이 좋습니다.

+0

확인. 나는 내 혼란을 겪는다. 내부 클래스는 둘러싼 클래스의 멤버와 비슷하기 때문에 보호 된 멤버 측면에서 생각하고있었습니다. 감사. –

+1

@ bruno 콘돔 : protected 클래스는 * 보호 된 멤버와 같습니다. –

+0

즉, Java에서 "protected"는 멤버 또는 내부 클래스에 적용되는지 여부에 관계없이 C++ 및 C#과 다릅니다. 동일한 패키지 (네임 스페이스)의 다른 클래스에 대한 액세스를 허용합니다. – Qwertie

1

보호 된 내부 클래스가 보호 된 멤버라고 생각할 수 있으므로 클래스, 패키지, 하위 클래스에서만 액세스 할 수 있지만 전 세계에서는 액세스 할 수 없습니다.

또한 outter 클래스에는 두 개의 액세스 한정자 만 있습니다. 그냥 공개 및 패키지.