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

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

Подклассы и методы (Выпуск 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

Комментариев нет: