Определение и реализация интерфейса

  • docx
  • 18.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-002162.docx

 Определение и реализация интерфейса

Интерфейс определяет набор методов, которые должны быть реали- зованы классом, наследующим этот интерфейс. Сам интерфейс не реали- зует методы.

Интерфейсы объявляются с помощью ключевого слова interface. Вот как выглядит упрощенная форма объявления интерфейса:

 

interface имя

{

тип_возврата   имя_метода_1 (список_параметров);

тип_возврата   имя_метода_2 (список_параметров);

. . . . . . . .

тип_возврата   имя_метода_N (список_параметров);

}

 

Интерфейсы синтаксически подобны абстрактным классам.

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

Он определяет, что должно быть сделано, но не уточняет, как.

 

Какой-либо интерфейс может унаследовать и реализовать любое ко- личество классов. И каждый по-своему. При этом один класс может реа- лизовать любое число разных интерфейсов.

Для реализации интерфейса класс должен обеспечить тела (реализа- цию) методов, описанных в интерфейсе. Каждый класс может опреде- лить собственную реализацию. Таким образом, два класса могут реали- зовать один и тот же интерфейс различными способами, но все классы поддерживают одинаковый набор методов.

Поскольку интерфейс для всех объектов одинаков, это позволяет программе, “осведомленной” о наличии интерфейса, использовать объ- екты любого класса.

 

Рассмотрим пример интерфейса для класса, который генерирует ряд чисел.

 

public interface ISeries

{

int    getNext ();                  // Возвращает следующее число ряда. void reset ();                               // Выполняет перезапуск.

void setStart (int x);    // Устанавливает начальное значение.

}

 

Этот интерфейс имеет имя ISeries. Хотя префикс "I" необязателен, многие программисты его используют, чтобы отличать интерфейсы от классов. Интерфейс ISeries объявлен открытым, поэтому он может быть реализован любым классом в любой программе.


Помимо сигнатур методов интерфейсы могут объявлять сигнатуры свойств, индексаторов и событий.

 

Так как в интерфейсе методы не содержат реализации, то:

       нельзя создать экземпляр интерфейса;

       интерфейсы не могут иметь полей, так как это подразумевает некоторую внутреннюю реализацию;

       они не могут определять конструкторы, деструкторы или опе- раторные методы;

       кроме того, ни один член интерфейса не может быть объявлен статическим;

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