© 2008 Наталия Македа
Все материалы блога защищены авторским правом. Любая перепечатка или использование материалов этого блога в коммерческих целях возможна лишь с письменного согласия автора. При некоммерческом использовании ссылка на блог обязательна.

среда, 15 апреля 2009 г.

Модификаторы доступа: резюме. Другие модификаторы (Выпуск 17)

Java предоставляет следующие модификаторы доступа (от самого разрешающего до самого ограничивающего):

  • public - элемент доступен из любого класса
  • protected - элемент доступен из подкласса или из любого класса пакета того класса, в котором находится элемент
  • default - элемент доступен из из любого класса пакета того класса, в котором находится элемент
  • private - элемент доступен лишь из того класса, в котором находится

Элементы подклассов могут иметь любой модификатор доступа, отличный от наследуемого, если только новый модификатор доступа не является более ограничивающим. В противном случае возникает ошибка компиляции.


В следующих статьях мы рассмотрим другие модификаторы: final, abstract, static, native, transient, synchronized, and volatile.

В Java порядок объявления модификаторов не имеет значения. Например, если вы напишите, что класс public final, то это равносильно тому, если бы вы написали final public. Если вы обхъявите метод protected static - это тоже самое, что и объявить его static protected.

Не все модификаторы одинаково применимы к разным элементам Java-языка (т.е. класс, переменная, метод, конструктор). Более детальные разъяснения будут даны в следующих статьях.


Читать далее!

Подклассы и методы (Выпуск 17)

Согласно спецификации Java методы не могут быть переписаны (например, в наследуемых классах). Например, у апплетов есть метод init(). Этот метод должен переписывать одноименный метод из супер-класса
java.applet.Applet, доступ к которому public. Таким образом, переписывающий метод init() из подкласса класса java.applet.Applet не можеть иметь более ограничивающий доступ, т.е., protected, private или default - его модификатор доступа может быть только public. В противном случае на этапе компиляции возникнет ошибка "Methods can’t be overridden to be more private" (Доступ к методам не может быть более ограниченным).

На рисунке ниже мы представили иерархию модификаторов доступа. Слева находится самый ограничивающий модификатор доступа. Справа - самый разрешающий. Методы подклассов могут иметь модификатор доступа отличный, от наследуемого, если он является более разрешающим (т.е. находится правее исходного модификатора доступа на рис. ниже).


Иерархия модификаторов доступа

Таким образом модификатор доступа к методу и подкласса может быть следующим:

  • private, protected, public, default, если модификатор доступа у метода суперкласса private
  • protected, public, default, если модификатор доступа у метода суперкласса default
  • protected, public, если модификатор доступа у метода суперкласса protected
  • public, если модификатор доступа у метода суперкласса public

На следующем рисунке показана "обратная" иерархия, которая приведёт к ошибке компиляции:


Обратная иерархия

То есть:

  • default не может быть ограничен до private
  • protected не может быть ограничен до default или private
  • public не может быть ограничен до protected, default или private


Читать далее!