В том же пакете, где объявлен защищенный член, разрешен доступ:
package package1;
public class C extends A{
public void go(){
A a = new A();
System.out.println(a.protectedInt); // got printed
C c = new C();
System.out.println(c.protectedInt); // got printed as well
}
}
Вне пакета, в котором объявлен защищенный член, доступ разрешен тогда и только тогда, когда по коду, который отвечает для реализации этого объекта. В этом случае C отвечает за реализацию этого объекта, поэтому он может получить доступ к защищенным.
package package2;
public class C extends A{
public void go(){
A a = new A();
System.out.println(a.protectedInt); // compiler complains
C c = new C();
System.out.println(c.protectedInt); // got printed
}
}