Реклама:

Вложенные классы

В этом параграфе уже несколько раз упоминалось, что в теле класса можно сделать описание другого, вложенного (nested) класса. А во вложенном классе можно снова описать вложенный, внутренний (inner) класс и т. д. Из вложенного класса можно обратиться к членам внешнего класса. Для того, чтобы определить экземпляр вложенного класса, необходимо определить экземпляр внешнего класса. Может оказаться, что экземпляров внешнего класса несколько, тогда имя экземпляра вложенного класса уточняется именем связанного с ним экземпляра внешнего класса. Более того, при создании вложенного экземпляра операция new тоже уточняется именем внешнего экземпляра.

Все вложенные классы можно разделить на вложенные классы-члены класса (member classes), описанные вне методов, и вложенные локальные классы (local classes), описанные внутри методов и/или блоков. Локальные классы, как и все локальные переменные, не являются членами класса.

Классы-члены могут быть объявлены статическим модификатором static. Поведение статических классов-членов ничем не отличается от поведения обычных классов, отличается только обращение к таким классам. Поэтому они называются вложенными классами верхнего уровня (nested top-level classes), хотя статические классы-члены можно вкладывать друг в друга. В них можно объявлять статические члены. Используются они обычно для того, чтобы сгруппировать вспомогательные классы вместе с основным классом.

Все нестатические вложенные классы называются внутренними (inner). В них нельзя объявлять статические члены.

Локальные классы, как и все локальные переменные, известны только в блоке, в котором они определены. Они могут быть безымянными.

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

Все классы Java распределяются по пакетам (packages). Кроме классов пакеты могут включать в себя интерфейсы и вложенные подпакеты (subpackages). Распределение по пакетам аналогично распределению файлов по каталогам и подкаталогам. Имена классов, интерфейсов в разных пакетах могут совпадать. Если надо использовать два класса с одинаковыми именами из разных пакетов, то имя класса уточняется именем пакета: пакет.класс. Такое уточненное имя называется полным именем класса. Пакетами пользуются еще и для того, чтобы добавить к уже имеющимся правам доступа к членам класса private, protected и public еще один, «пакетный» уровень доступа. Если член класса не отмечен ни одним из модификаторов private, protected, public, то, по умолчанию, к нему осуществляется пакетный доступ (default access), а именно, к такому члену может обратиться любой метод любого класса из того же пакета, но если класс не помечен модификатором public, то все его члены, даже открытые, public, не будут видны из других пакетов.

Создание пакета и подпакета. Для создания пакета используется оператор package, надо просто в первой строке Java-файла с исходным кодом записать следующую строку с именем пакета:

package mypack;

Тем самым создается пакет с указанным именем mypack и все классы, записанные в этом файле, попадут в пакет mypack. Повторяя эту строку в начале каждого исходного файла, включаем в пакет новые классы.


⇐ Предыдущая страница| |Следующая страница ⇒