2013-03-24 1 views
0

Java에서 다른 패키지의 보호 된 멤버에 액세스하려면 어떻게해야합니까? subderived 주에서diff 패키지에서 Java protected membes 액세스

package p1 
    class base  
     protected int x 

package p2 
    import p1.* 
    class derived extends base 
     int x 

class subderived extends derived 
    int x 

나는 우리가 basex에 액세스 할 참조를 사용할 수없는 경우에만 상속을 사용할 수 있습니다 보호 사양으로 p1.basex에 액세스하려는. derivedx에 액세스하려면 super.x을 사용할 수 있지만 subderived에서 어떻게 base.x에 액세스 할 수 있습니까?

답변

2

보호 된 멤버는 예선없이 바로 유도 및 하위 파생 클래스에서 액세스 할 수 있습니다 : 당신이

x = 123; 

을 쓸 수 있습니다 및 그것을 한, 잘 컴파일 오히려

base.x = 123; 

을 작성하는 것보다 파생 클래스의 메서드에 있습니다. 그러나이 작업을 수행하려면 파생 클래스 자체에서 동일한 이름의 멤버를 제거해야합니다. 그렇지 않으면 기본 멤버는 이며 숨겨진 일반적인 수준의 상속 계층 구조를 통해 액세스 할 수 없습니다. 즉, 반사을 사용하지 않고 말입니다.

+1

하지만'derived.x'가 아닙니다. [숨김] (http://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html)'base.x'? – wchargin

+0

@WChargin 맞습니다. 파생 된 클래스에 'x'가 숨겨져 있다는 사실을 놓쳤습니다. 나는 그 다른'x'가 의도적으로 거기에 놓이는 지 의심 스럽습니다. 그래서 이것을 반영하기 위해 답을 수정했습니다. 감사! – dasblinkenlight

+0

** 감사합니다 ** –

관련 문제