Защищенные члены в суперклассе, недоступном косвенному подклассу в Java - PullRequest
3 голосов
/ 12 мая 2010

Почему в Java защищенные члены суперкласса недоступны косвенному подклассу в другом пакете? Я знаю, что прямой подкласс в другом пакете может получить доступ к защищенным членам суперкласса. Я думал, что любой подкласс может получить доступ к своим унаследованным защищенным членам.

EDIT

Извините новичка ошибка, подклассы могут получить доступ к защищенным членам косвенных суперклассов.

Ответы [ 2 ]

11 голосов
/ 12 мая 2010

Возможно, вы немного смущены.

Вот мое быстрое демо и показывает косвенный подкласс, обращающийся к защищенному атрибуту:

// A.java
package a;
public class A {
    protected int a;
}

// B.java 
package b;   //<-- intermediate subclass
import a.A;
public class B extends A {
}

// C.java
package c; //<-- different package 
import b.B;
public class C extends B  { // <-- C is an indirect sub class of A 
    void testIt(){
        a++;
        System.out.println( this.a );//<-- Inherited from class A
    }
    public static void main( String [] args ) {
        C c = new C();
        c.testIt();
    }
}

печатает 1

Как видите, атрибут a доступен из подкласса C.

Если вы покажете нам код, который вы пробуете, мы сможем выяснить, в чем ваше замешательство.

0 голосов
/ 27 сентября 2012

Может быть, проблема в том, что он пытается получить доступ к защищенному полю другого экземпляра, но не к своему. такие как:

package a;
public class A{
    protected int a;
}

package b;
public class B extends A{

}

package c;
public class C extends B{
    public void accessField(){
        A ancient = new A();
        ancient.a = 2;  //That wouldn't work.

        a = 2;   //That works.
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...