Protected
Модификатор доступа protected позволяет обращаться к данным и методам класса лишь самому классу, классам, хранящимся в этой же упаковке, и унаследованным классам, но лишь в том случае, если они находятся в одной упаковке с классом-предком. Обычно такой модификатор применяют для того, чтобы закрыть доступ к данным и методам для тех классов, которые не состоят в "родственных отношениях" с защищаемым классом. Обратите внимание на то, что в Java классы считаются родственными, не только если они унаследованы друг от друга, но и просто хранятся в одной и той же упаковке.
Предположим, что в упаковке Nums имеется некий класс First и что он содержит переменную и метод, объявленные protected:
package Nums;
class First
{
protected int protVar;
protected void protMethod()
{
System.out.println("protMeth called!");
}
}
Если теперь в той же упаковке описать другой класс с именем Second, то он сможет свободно обращаться к методам и данным класса First, не обращая внимания на то, что Second не был унаследован от First:
package Nums;
class Second
{
void protAccessMethod()
{
First ap = new First();
ap.protVar = 345;
ap.protMethod();
}
}
Напомню, что унаследованные классы могут беспрепятственно обращаться к данным и методам, отмеченным модификатором protected, только в том случае, если класс-предок располагается в той же упаковке, что и сами классы-наследники.