Пакеты отличаются в зависимости от вашего класса - в частности, ваш класс PlanetShape
находится в пакете, отличающемся от классов, которые он расширяет.
Непосредственно из Документация Java: (выделено мной)
Модификатор protected указывает, что к элементу можно получить доступ только в его собственном пакете (как с package-private) и,кроме того, подклассом своего класса в другом пакете.
Очевидно, что " подклассом своего класса в другом пакете ", кажется, является причиной некоторой путаницы иЯ согласен, что формулировка довольно двусмысленная.
По сути, то, что они пытаются сказать , вы можете сделать это:
public class PlanetShape extends Shape {
aMethod() {
// call the protected method declared in the Super class (ok)
doProtectedMethodOfShape();
}
}
Но не this:
public class PlanetShape extends Shape {
aMethod() {
Shape s = new Shape();
s.doProtectedMethodOfShape(); // error here
}
}
Во втором примере вы получаете сообщение об ошибке, потому что у вас нет доступа к защищенному методу через наследование , вы просто пытаетесьполучить доступ к защищенной функции-члену из экземпляра в другом пакете.