Например, так будет выглядеть исходный код класса UseBook, в котором используется механизм импорта пакетов: // Использование ключевого слова import, package bookpackext; // Импорт пакета bookpack. import bookpack.*; // использовать класс Book из пакета bookpack class UseBook { public static void main(String args[]) { // Теперь к членам класса Book можно обращаться непосредственно, // не указывая полностью определенное имя. Book books[] = new Book[5]; books[0] = new Book("Java: A Beginner's Guide", "Schildt", 2007); books[1] = new Book("Java: The Complete Reference", "Schildt", 2007); books[2] = new Book("The Art of Java", "Schildt and Holmes", 2003); books[3] = new Book("Red Storm Rising", "Clancy", 1986); books[4] = new Book("On the Road", "Kerouac", 1955); for(int i=0; i < books.length; i++) books[i].show; } }
Как видите, теперь нет нужды предварять имя класса Book именем пакета. Библиотечные классы Java, содержащиеся в пакетах
Как пояснялось ранее, в Java определено большое количество стандартных классов, доступных всем программам. Библиотека классов Java обычно называется Java API (Application Programming Interface — прикладной программный интерфейс). Классы, входящие в состав библиотеки Java API, хранятся в пакетах. На верхней ступени иерархии находится пакет java. В его состав входят подчиненные пакеты, включая и перечисленные ниже. Пакет Описание java.lang Содержит большое количество классов общего назначения java.io Содержит классы, предназначенные для поддержки ввода-вывода java.net Содержит классы, предназначенные для поддержки сетевого взаимодействия java.applet Содержит классы, предназначенные для создания апплетов java.awt Содержит классы, обеспечивающие поддержку набора инструментальных средств Abstract Window Toolkit
В примерах программ, представленных в этой книге, с самого начала использовался пакет j ava. lang. Помимо прочего, он содержит класс System (к нему не раз приходилось обращаться при вызове метода println ). Пакет j ava. lang примечателен тем, что он автоматически включается в каждую программу на Java. А содержимое других пакетов приходится импортировать явным образом. Некоторые из этих пакетов будут рассмотрены в последующих главах книги. Интерфейсы
Иногда в объектно-ориентированном программировании полезно определить, что именно должен делать класс, но не как он должен это делать. Примером тому может служить упоминавшийся ранее абстрактный метод. В абстрактном методе определяются возвращаемый тип и сигнатура метода, но не предоставляется его реализация. А в подклассе должна быть обеспечена своя собственная реализация каждого абстрактного метода, определенного в его суперклассе. Таким образом, абстрактный метод определяет интерфейс, но не реализацию метода. Конечно, абстрактные классы и методы приносят известную пользу, но положенный в их основу принцип может быть развит далее. В Java предусмотрено разделение интерфейса класса и его реализации с помощью ключевого слова interface.
С точки зрения синтаксиса интерфейсы подобны абстрактным классам. Но в интерфейсе ни у одного из методов не должно быть тела. Это означает, что в интерфейсе вообще не предоставляется никакой реализации. В нем указывается только, что именно следует делать, но не как это делать. Как только интерфейс будет определен, он может быть реализован в любом количестве классов. Кроме того, в одном классе может быть реализовано любое количество интерфейсов.
Для реализации интерфейса в классе должны быть предоставлены тела (т.е. конкретные реализации) методов, описанных в этом интерфейсе. Каждому классу предоставляется полная свобода для определения деталей своей собственной реализации интерфейса. Следовательно, один и тот же интерфейс может быть реализован в двух классах по-разному. Тем не менее в каждом из них должен поддерживаться один и тот же ряд методов данного интерфейса. А в том коде, где известен такой интерфейс, могут использоваться объекты любого из этих двух классов, поскольку интерфейс для всех этих объектов остается одинаковым. Благодаря поддержке интерфейсов в Java может быть в полной мере реализован главный принцип полиморфизма: “один интерфейс — множество методов”.
Интерфейсы объявляются с помощью ключевого слова interface. Ниже приведена упрощенная форма объявления интерфейса. доступ interface имя { возвращаемый_тип имя_метода_1 (список_параметров) ; возвращаемый__тип имя_метода_2 (список_параметров) ; тип переменная__1 = значение; тип переменная_2 = значение; // ... возвращаемый_тип имя_метода_Ы(список_параметров) ; тип переменная_Ы = значение; }