Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №2 2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
340.48 Кб
Скачать

Описание интерфейса

Интерфейс представляет собой класс, в котором все поля – константы (т.е. статические – static и неизменяемые – final), а все методы абстрактные.

При описании интерфейса вместо ключевого слова class используется ключевое слово interface, после которого указывается имя интерфейса, а затем, в фигурных скобках список полей-констант и методов. Никаких модификаторов перед объявлением полей и методов ставить не надо: все поля автоматически становятся public static final, а методы – public abstract. Методы не могут иметь реализации, т. е. после закрывающей круглой скобки сразу ставится точка с запятой.

Опишем, например, интерфейс для объекта, который «умеет» сообщать информацию о себе в формате прайс-листа (т. е. сообщать свое название, цену, и краткое описание).

interface PriceItem {

String getTitle();

int getPrice(int count);

String getDescription();

}

Для разнообразия метод getPrice() в этом примере требует один целочисленный параметр (количество единиц товара).

Такой интерфейс полезен для программы типа Интернет-магазин, которая должна по запросу пользователя формировать прайс – перечень товаров с указанием их цены и описания.

Реализация интерфейса

Класс может реализовывать интерфейс, т. е. перенимать его поведение. Эта процедура аналогична наследованию, только вместо ключевого слова extends используется ключевое слово implements. Но если после extends может быть указан только один класс, то после implements можно перечислить через запятую произвольное количество интерфейсов. Класс может одновременно наследовать от другого класса и реализовывать интерфейсы.

Мы можем взять любой существующий в программе класс и «научить» его сообщать о себе все необходимые сведения. Например, класс Dog из предыдущей лабораторной работы. Можно изменить этот класс, заставив его реализовывать наш интерфейс, а можно оставить в неприкосновенности (если класс уже используется во многих программах и входит в общедоступную библиотеку, изменять его может быть неудобно) и создать на его базе новый класс. В новом классе обязательно требуется переопределить абстрактные методы интерфейса.

сlass Dog2 extends Dog implements PriceItem {

private int price;

String getTitle() {

return ("Умная собака");

};

int getPrice(int count) {

return price * count;

};

int setPrice(int p) {

price = p;

}

String getDescription() {

return ("Умная собака, которая знает свой возраст и умеет сообщать его с помощью лая");

};

}

Класс Dog2 «умеет» то же самое, что и старый класс Dog, но помимо этого его можно использовать в программе Интернет-магазина для формирования прайса. Обратите внимание, класс Dog ничего не знал о цене, поэтому понадобилось добавить метод setPrice() и поле price, чтобы эту цену можно было бы изменять. А изменять описание собаки не понадобится, поэтому метод getDescription() просто выводит одну и ту же строку.

Точно также можно взять множество других классов, не имеющих отношения к собакам – велосипеды, футболки, компьютеры – и сделать их пригодными для нашей новой программы с помощью интерфейса PriceItem и механизма наследования.