Права доступа к членам класса
Как видно из листинга 3.1, в пакете недоступны только закрытые, private, поля другого класса.
В файле Inp2.java описаны два класса: inp2 и класс Derivedp2, расширяющий класс base. Эти классы находятся в другом пакете р2. В этих классах тоже сделана попытка обращения к полям класса вазе. Неудачные попытки прокомментированы сообщениями компилятора. Листинг 3.2 показывает содержимое этого файла.
Напомним, что класс вазе должен быть помечен при своем описании в пакете p1 модификатором public, иначе из пакета р2 не будет видно ни одного его члена.
Листинг 3.2. Файл Inp2.java с описанием пакета р2.
package p2;
import pl.Base;
class Inp2{
public static void main(String[] args){
Base b = new Base();
// b.priv = 1; // "priv has private access in pl.Base"
// b.pack = 1; // "pack is not public in pl.Base;
// cannot be accessed from outside package"
// b.prot = 1; //""prot has protected access in pi.Base"
b.publ = 1;
}
}
class Derivedp2 extends Base{
public void, f (Base a){
// a.priv = 1; // "priv has private access in .p1.Base"
// a.pack = 1; // "pack, is not public in pi.Base; cannot
//be accessed from outside package"
// a.prot = 1; // "prot has protected access in p1.Base"
a.publ = 1;
// priv = 1; // "priv has private access in pi.Base"
// pack = 1; // "pack is not public in pi.Base; cannot
// be accessed from outside package"
prot = 1;
publ = 1;
super.prot = 1;
}
}
Здесь, в другом пакете, доступ ограничен в большей степени.
Из независимого класса можно обратиться только к открытым, public, полям класса другого пакета. Из подкласса можно обратиться еще и к защищенным, protected, полям, но только унаследованным непосредственно, а не через экземпляр суперкласса.
Все указанное относится не только к полям, но и к методам. Подытожим все сказанное в табл. 3.1.
Таблица 3.1. Права доступа к полям и методам класса.
| Класс | Пакет | Пакет и подклассы | Все классы | |
|---|---|---|---|---|
| private | + | |||
| "package" | + | + | ||
| protected | + | + | * | |
| public | + | + | + | + |
Особенность доступа к protected-полям и методам из чужого пакета отмечена звездочкой.
