![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пакеты в JavaСтр 1 из 3Следующая ⇒
Пакеты и интерфейсы В данной главе речь идет о пакетах и интерфейсах. Рассказано, как создаются пакеты, описаны принципы их применения и предназначение. Здесь же можно найти полезную информацию об интерфейсах и тех широких возможностях, которые открываются перед программистом при условии их разумного применения.
Пакеты в Java В известном смысле пакет — это контейнер для классов, их пространство имен. Современные тенденции программирования таковы, что обычно приходится создавать достаточно объемные проекты, имея дело с большим количеством классов. В принципе, каждый из этих классов должен иметь уникальное имя. Хотя гипотетически придумать названий для классов можно бесконечно много, наступает момент, когда подобный подход означал бы выход за рамки разумного. В соответствие с концепцией пакетов, все классы проекта разбиваются по группам, которые и называются пакетами. Имя класса должно быть уникальным в пределах его пакета. При этом не важно, есть ли в другом пакете класс с таким же именем. Такой подход прост, понятен и удобен. Познакомимся с ним поближе. Для определения пакета необходимо в файле с описанием класса, включаемого в пакет, первой командой указать инструкцию package и имя пакета, например: package mypack; В данном случае mypack — это имя пакета. Если пакет с таким именем уже существует, соответствующий класс (или классы) из файла добавляется в этот пакет. Если такого пакета нет, он создается. Таким образом, одна и та же инструкция package может использоваться в нескольких файлах. Однако в файле может быть только одна инструкция package или не быть вовсе. В последнем случае классы попадают в так называемый пакет по умолчанию. Пакет, кроме классов, может содержать интерфейсы (описываются далее в этой лекции), а также подпакеты (то есть другие пакеты). При указании имени подпакета (пакета, находящегося в другом пакете) используется точечный синтаксис — имени подпакета предшествует имя пакета, а в качестве разделителя указывается точка. При этом в Java действует жесткое правило: иерархия пакетов должна строго соответствовать структуре файловой системы. Если, например, файл содержит начальную инструкцию package java.awt.image, это означает, что файлы подпакета image размещены в каталоге java/awt/image. С практической точки зрения наиболее важный аспект в работе с пакетами — это, пожалуй, схема доступа к членам классов с учетом их размещения по пакетам. В табл. 1 перечислены уровни доступа к членам класса с учетом использованного при их объявлении спецификатора уровня доступа. Таблица 1. Уровни доступа членов класса
Символ плюс (+) означает, что член доступен, а символ минус (-) — что нет. Нетривиальность ситуации усугубляется еще и тем, что подклассы и суперклассы могут размещаться в разных пакетах. Существует несколько правил, которые достаточно полно отражают ситуацию с доступностью различных членов класса. Наличие идентификатора “public” у члена класса означает, что он доступен везде: как в классе, так и за его пределами и даже в классах других пакетов. Наличие идентификатора “private” означает, что член доступен только в пределах класса, где он объявлен. Если у члена нет идентификатора доступа, он доступен в пределах пакета. Члены касса, объявленные с идентификатором “protected”, доступны в пакете и в подклассах вне пакета. Поскольку ранее мы использовали один стандартный пакет по умолчанию, между открытыми членами и членами, для которых идентификатор доступа не указан, принципиальной разницы не было. У классов также есть уровни доступа. Точнее, в описании класса можно в сигнатуре указать ключевое слово public (а можно не указывать). Если класс объявлен как public, он доступен отовсюду. Если идентификатор public не указан, класс доступен только в пределах своего пакета. Если в программе выполняется обращение к классам, размещенным во внешних пакетах, необходимо указывать полное имя класса: через точку перечисляется вся иерархия пакетов, где размещен нужный класс. Например, если класс MyClass находится в подпакете subpack пакета mypack, то обращение к этому классу будет иметь вид: mypack.subpack.MyClass Чтобы можно было ссылаться на классы внешних пакетов в упрощенной форме, прибегают к импорту пакетов. При этом используется ключевое слово import (соответствующая команда размещается в начале файла после команды подключения пакета). Файл может содержать несколько инструкций импорта. Можно подключать (импортировать) отдельные классы пакета или весь пакет. В частности, для импорта класса после ключевого слова import указывают полное имя класса (то есть с учетом иерархии пакетов), например: import mypack.subpack.MyClass Для импорта всего пакета после имени пакета ставят звездочку (*), например: import mypack.subpack.* Существуют некоторые ограничения, накладываемые на импорт пакетов. Импортировать можно только открытые классы. Пакет java.lang (базовая библиотека) можно не импортировать — он и так доступен. Имя файла должно совпадать с именем открытого класса, если такой класс существует в файле. Если в пакете несколько открытых классов, они должны размещаться в разных файлах.
|