2015-06-25 2 views
2

JLS 6.6.2 дает нам следующее ограничение на доступ к пакетам защищенных элементов.Защищенный модификатор доступа

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

Что они подразумевают под ответственностью за реализацию. Не могли бы вы привести пример?

ответ

4

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

package one; 
public class A {protected int b;} 

package two; 
public class B extends A { 

    public void someMethod (A other) 
    { 
     b = 5; // allowed 
     other.b = 5; // not allowed 
    } 
} 
+0

Неправильное использование. Класс-код может получить доступ к защищенным полям всех экземпляров. – DThought

+1

Код класса @DThought может обращаться к любым полям собственного класса (даже private), но доступ к защищенным полям суперкласса, принадлежащих другому пакету, может быть выполнен только для тот же экземпляр. – Eran

+0

Вы действительно попробовали пример, который вы дали? Я сделал это, и eclipse позволяет мне с радостью изменить мое поле other.test, которое является защищенным полем в суперклассе. AFAIK пакет, содержащий класс, применим только для модификатора доступа по умолчанию – DThought