안녕하세요.  

오늘은 질문이 많네요 ^^


안드로이드의 Launcher 소스를  보다가   문의 드립니다.

상위 클래스의    protected  변수가   

상속받은  하위 클래스에 따라서  어떤 곳에서 사용하고,  어떤 곳에서는  에러가 나는 이유가 뭘까요?


안드로이드의  View 클래스 보면

public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {
       .. 중간 생략 ....
/**
     * The offset, in pixels, by which the content of this view is scrolled
     * horizontally.
     * {@hide}
     */
    @ViewDebug.ExportedProperty
    protected int mScrollX;
    /**
     * The offset, in pixels, by which the content of this view is scrolled
     * vertically.
     * {@hide}
     */
    @ViewDebug.ExportedProperty
    protected int mScrollY;
    ...  중간 생략 ....

};

위와 같이   mScrollX 와 mScrollY 가  Protected 변수로 있습니다.


안드로이드의  Launcher 소스를 보면, 

public class BubbleTextView extends TextView {
      .. 중간 생략 ...
@Override
    public void draw(Canvas canvas) {
        final Drawable background = mBackground;
        if (background != null) {
            final int scrollX = mScrollX;
            final int scrollY = mScrollY;
      .. 중간 생략
};


이렇게  상속 받은 클래스의 override 함수에서 사용하고 있습니다.



그런데,     이 코드를  이클립스로  가져가면,  

mScrollX  connat be resolved

라고  에러가 나옵니다. 


왜  같은 코드가     코드의 위치에  따라서 에러로 바뀌는 지요?

주석의  @hide는   무슨 역할을 하는 것인지요?

이것이  Java의 특별한 문법인지요?


C++ 에서는 이런 경우는 없는데,  이상합니다.

감사합니다.