АБОБА. Справочник по программированию на Java Методическое пособие
Скачать 242.41 Kb.
|
Интерфейсы и пакетыПакеты – это контейнеры классов, которые используются для сохранения изолированности пространства имен класса. Например, пакет позволяет создать класс по имени List, который можно хранить в отдельном пакете, не беспокоясь о возможных конфликтах с другим классом List, хранящимся в каком-то другом месте. Пакеты хранятся в иерархической структуре и явно импортируются в определения новых классов. В предшествующих главах было описано использование методов для определения интерфейса к данным класса. С помощью ключевого слова interface Java позволяет полностью абстрагировать интерфейс от его реализации. Используя это ключевое слово, можно указать набор методов, которые могут быть реализованы одним или более классов. В действительности сам по себе интерфейс не определяет никакой реализации. Хотя они подобны абстрактным классам, интерфейсы предоставляют дополнительную возможность: один класс может реализовать более одного интерфейса. И наоборот, класс может наследоваться только от одного суперкласса (абстрактного или не абстрактного). ПакетыВ предшествующих главах для всех примеров классов мы использовали имена из одного пространства имен. Это означает, что во избежание конфликта имен для каждого класса нужно было указывать уникальное имя. По истечении некоторого времени при отсутствии какого-либо способа управления пространством имен может возникнуть ситуация, когда выбор удобных описательных имен отдельных классов станет затруднительным. Кроме того, требуется также какой-нибудь способ обеспечения того, чтобы выбранное имя класса было достаточно уникальным и не конфликтовало с именами классов, выбранными другими программистами. Пакет служит одновременно механизмом и присвоения имен, и управления видимостью. Внутри пакета можно определить классы, не доступные коду вне этого пакета. Можно также определить члены класса, которые видны только другим членам этого же пакета. Такой механизм позволяет классам располагать полными сведениями друг о друге, но не предоставлять эти сведения остальному миру. Создание пакета является простой задачей: достаточно включить команду package в качестве первого оператора исходного файла Java. Любые классы, объявленные внутри этого файла, будут принадлежать указанному пакету. Оператор package определяет пространство имен, в котором хранятся классы. Если оператор package опущен, имена классов помещаются в используемый по умолчанию пакет без имени. Хотя для коротких примеров программ пакет, используемый по умолчанию, вполне подходит, он не годится для реальных приложений. В большинстве случаев для кода придется определять пакет. Пакет задает имя пакета. Например, показанный ниже оператор создает пакет MyPackage: package MyPackage; Для хранения пакетов система Java использует каталоги файловой системы. Например, файлы .class любых классов, объявленных в качестве составной части пакета MyPackage, должны храниться в каталоге MyPackage. Помните, что регистр символов имеет значение, а имя каталога должно в точности совпадать имени пакета. Один и тот же оператор package может присутствовать в более чем одном файле. Этот оператор просто указывает пакет, к которому принадлежат классы, определенные в данном файле. Он не препятствует тому, чтобы другие классы в других файлах были частью этого же пакета. Большинство пакетов, используемых в реальных программах, распределено по множеству файлов. Java позволяет создавать иерархию пакетов. Для этого применяется символ точки. Оператор многоуровневого пакета имеет следующую общую форму: package пакет1[.пакет2[.пакет3]]; Иерархия пакетов должна быть отражена в файловой системе среды разработки Java. Необходимо тщательно проверять правильность выбора имен пакетов. Имя пакета нельзя изменить, не изменяя имя каталога, в котором хранятся классы. Защита доступаВ предшествующих главах вы узнали о различных аспектах механизма управления доступом Java и его спецификаторах. Например, вы уже знаете, что доступ к приватному члену класса предоставляется только другим членам этого класса. Пакеты добавляют к управлению доступом еще одно измерение. Как вы вскоре убедитесь, Java предоставляет множество уровней защиты, обеспечивая очень точное управление видимостью переменных и методов внутри классов, подклассов и пакетов. Классы и пакеты одновременно служат средствами инкапсуляции и хранилищем пространства имен и области определения переменных и методов. Пакеты играют роль контейнеров классов и других подчиненных пакетов. Классы служат контейнерами данных и кода. Класс – наименьшая единица абстракции Java. Вследствие взаимодействия между классами и пакетами Java определяет четыре категории видимости членов класса. Подклассы в одном пакете. Классы в одном пакете, не являющиеся подклассами. Подклассы в различных пакетах. Классы, которые не находятся в одном пакете и не являются подклассами. Три спецификатора доступа: private, public и protected – предоставляют разнообразные способы создания множество уровней доступа, необходимых для этих категорий. |