2015-01-07 9 views
-2

Java 클래스의 보호 속성을 동일한 패키지의 다른 클래스에서 액세스 할 수있는 이유는 무엇입니까?동일한 패키지의 다른 클래스에서 보호 속성을 액세스 할 수있는 이유

나는 상속을 통해서만 액세스 할 수 있다고 생각했습니다.

A.java

package abc; 
class A { 
    protected int attr1; 
} 

B.java

package abc; 
class B { 
    B() { 
     A obj = new A(); 
     obj.attr1 = 2; 
    } 

    public static void main(String[] args) { 
     B obj2 = new B(); 
    } 
} 
+0

당신이 물어 보는 이유는 '비공개'가시성 수정 기호가있는 이유입니다. 'protected'는 같은 패키지에있는 클래스들을위한 것입니다. –

+1

@DrewKennedy 아니요. 기본 공개 설정 (즉, '비공개', '공개', '보호'없음)은 package-private입니다. 'protected '는 (AFAIK) 서브 클래스 만이 그것에 접근 할 수 있음을 의미합니다. 그것은 패키지 개인이 아닙니다. –

+0

@newbiedoodle Protected는 하위 클래스 만 액세스 할 수 있음을 의미하지 않습니다. –

답변

1

그 언어 제작자의 결정이 있었기 때문에. 클래스가
뿐만 아니라 서브 클래스를 정의하는 클래스의으로 그들을 정의로

방법/보호 액세스 한정자 필드는 같은 패키지에서 두 클래스로
액세스 할 수 있습니다. 물론
정의 클래스으로 액세스 할 수도 있습니다.

+0

그들은이 행동을 어떻게 정당화 했습니까? –

+3

정말 물어 봐야합니다. 말할 것도없고, 단지 설계 결정 일뿐입니다. 참고 : http://stackoverflow.com/questions/13309609/why-protected-can-be-access-in-same-package-without-inheritance-in-java –

0

이렇게 생각해야합니다. protected공개 액세스 수준의 종류입니다. 보호 된 멤버는 확장을 위해 설계된 클래스에서 공용 API의 일부입니다. API 클라이언트가 액세스 할 수있는 멤버가 API 구현에 액세스 할 수없는 경우, 특히 기본 액세스 수준 (비공개)에 액세스 할 수있는 다른 멤버가 액세스 할 수없는 위치에서는 의미가 없습니다.