Права доступа к членам класса
Пришло время подробно разобрать различные ограничения доступа к полям и методам класса.
Рассмотрим большой пример. Пусть имеется пять классов, размещенных в двух пакетах, как показано на рис. 3.1.
Рис. 3.1. Размещение наших классов по пакетам
В файле Base.java описаны три класса: inpi, Base и класс Derivedpi, расширяющий класс вазе. Эти классы размещены в пакете pi. В классе Base определены переменные всех четырех типов доступа, а в методах f() классов inp1 и Derivedp1 сделана попытка доступа ко всем полям класса вазе. Неудачные попытки отмечены комментариями. В комментариях помещены сообщения компилятора. Листинг 3.1 показывает содержимое этого файла.
Листинг 3.1. Файл Base.java с описанием пакета p1.
package p1; class Inp1{ public void f () { Base b = new Base(); // b.priv = 1; // "priv has private access in p1.Base" b.pack = 1; b.prot = 1; b.publ = 1; } } public class Base{ private int priv = 0; int pack = 0; protected int prot = 0; public int publ = 0; } class Derivedpi extends Base{ public void f(Base a) { // a.priv = 1; // "priv hds private access in pi.Base" a.pack = 1; a.prot = 1; a.publ = 1; // priv = 1; // "priv has private access in pi.Base" pack = 1; prot = 1; publ = 1; } }