Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пакеты в Java






Пакеты и интерфейсы

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

 

Пакеты в Java

В известном смысле пакет — это контейнер для классов, их пространство имен. Современные тенденции программирования таковы, что обычно приходится создавать достаточно объемные проекты, имея дело с большим количеством классов. В принципе, каждый из этих классов должен иметь уникальное имя. Хотя гипотетически придумать названий для классов можно бесконечно много, наступает момент, когда подобный подход означал бы выход за рамки разумного.

В соответствие с концепцией пакетов, все классы проекта разбиваются по группам, которые и называются пакетами. Имя класса должно быть уникальным в пределах его пакета. При этом не важно, есть ли в другом пакете класс с таким же именем. Такой подход прост, понятен и удобен. Познакомимся с ним поближе.

Для определения пакета необходимо в файле с описанием класса, включаемого в пакет, первой командой указать инструкцию package и имя пакета, например:

package mypack;

В данном случае mypack — это имя пакета. Если пакет с таким именем уже существует, соответствующий класс (или классы) из файла добавляется в этот пакет.

Если такого пакета нет, он создается. Таким образом, одна и та же инструкция package может использоваться в нескольких файлах. Однако в файле может быть только одна инструкция package или не быть вовсе. В последнем случае классы попадают в так называемый пакет по умолчанию.

Пакет, кроме классов, может содержать интерфейсы (описываются далее в этой лекции), а также подпакеты (то есть другие пакеты). При указании имени подпакета (пакета, находящегося в другом пакете) используется точечный синтаксис — имени подпакета предшествует имя пакета, а в качестве разделителя указывается точка. При этом в Java действует жесткое правило: иерархия пакетов должна строго соответствовать структуре файловой системы. Если, например, файл содержит начальную инструкцию package java.awt.image, это означает, что файлы подпакета image размещены в каталоге java/awt/image.

С практической точки зрения наиболее важный аспект в работе с пакетами — это, пожалуй, схема доступа к членам классов с учетом их размещения по пакетам. В табл. 1 перечислены уровни доступа к членам класса с учетом использованного при их объявлении спецификатора уровня доступа.

Таблица 1. Уровни доступа членов класса

 

Идентификатор доступа private Нет protected public
Тот же класс + + + +
Подкласс того же пакета - + + +
Не подкласс того же пакета - + + +
Подкласс в другом пакете - - + +
Не подкласс в другом пакете - - - +

 

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

Наличие идентификатора “public” у члена класса означает, что он доступен везде: как в классе, так и за его пределами и даже в классах других пакетов.

Наличие идентификатора “private” означает, что член доступен только в пределах класса, где он объявлен.

Если у члена нет идентификатора доступа, он доступен в пределах пакета.

Члены касса, объявленные с идентификатором “protected”, доступны в пакете и в подклассах вне пакета.

Поскольку ранее мы использовали один стандартный пакет по умолчанию, между открытыми членами и членами, для которых идентификатор доступа не указан, принципиальной разницы не было.

У классов также есть уровни доступа. Точнее, в описании класса можно в сигнатуре указать ключевое слово public (а можно не указывать). Если класс объявлен как public, он доступен отовсюду. Если идентификатор public не указан, класс доступен только в пределах своего пакета.

Если в программе выполняется обращение к классам, размещенным во внешних пакетах, необходимо указывать полное имя класса: через точку перечисляется вся иерархия пакетов, где размещен нужный класс. Например, если класс MyClass находится в подпакете subpack пакета mypack, то обращение к этому классу будет иметь вид:

mypack.subpack.MyClass

Чтобы можно было ссылаться на классы внешних пакетов в упрощенной форме, прибегают к импорту пакетов. При этом используется ключевое слово import (соответствующая команда размещается в начале файла после команды подключения пакета). Файл может содержать несколько инструкций импорта. Можно подключать (импортировать) отдельные классы пакета или весь пакет. В частности, для импорта класса после ключевого слова import указывают полное имя класса (то есть с учетом иерархии пакетов), например:

import mypack.subpack.MyClass

Для импорта всего пакета после имени пакета ставят звездочку (*), например:

import mypack.subpack.*

Существуют некоторые ограничения, накладываемые на импорт пакетов. Импортировать можно только открытые классы.

Пакет java.lang (базовая библиотека) можно не импортировать — он и так доступен.

Имя файла должно совпадать с именем открытого класса, если такой класс существует в файле.

Если в пакете несколько открытых классов, они должны размещаться в разных файлах.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.011 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал