Иллюстрированный самоучитель по Java



              

Права доступа к членам класса


Пришло время подробно разобрать различные ограничения доступа к полям и методам класса.

Рассмотрим большой пример. Пусть имеется пять классов, размещенных в двух пакетах, как показано на рис. 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; 

  } 

}

Как видно из листинга 3.1, в пакете недоступны только закрытые,

private

, поля другого класса.

В файле Inp2.java описаны два класса:

inp2

и класс

Derivedp2

, расширяющий класс

base

. Эти классы находятся в другом пакете

р2

. В этих классах тоже сделана попытка обращения к полям класса вазе. Неудачные попытки прокомментированы сообщениями компилятора. Листинг 3.2 показывает содержимое этого файла.




Содержание  Назад  Вперед