Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Java.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3.45 Mб
Скачать

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

Единожды определенный интерфейс может быть реализован одним или несколькими классами. Для того чтобы реализовать интерфейс, в определении класса надо включить ключевое слово implements, а затем определить метод объявленные в составе интерфейса. Определение класса, реализующего интерфейс, выглядит следующим образом:

class тип_класса extends суперкласс implements интерфейс {

// тело класса

}

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

Реализуемые методы интерфейса должны быть объявлены как public. Сигнатура реализованного метода должна полностью соответствовать сигнатуре, заявленной в составе интерфейса.

Ниже приведен пример класса HomeRadio реализующего интерфейс Radio.

Листинг 3.23

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

public class HomeRadio implements Radio {

private int channel;

@Override

public void on() {

System.out.println("Радио включено");

}

@Override

public void off() {

System.out.println("Радио выключено");

}

@Override

public void nextChannel() {

this.channel++;

}

@Override

public void previousChannel() {

this.channel--;

}

@Override

public void showChannel() {

System.out.println("Текущий канал "+channel);

}

}

Обратите внимание на то, что все методы объявлены как public. Это необходимо, так как любой метод интерфейса считается общедоступным. Метод, к которому нельзя обратиться из других классов, можно попросту не включать в интерфейс. Ниже приведен код программы, демонстрирующей использование класса (листинг 3.24).

Листинг 3.24

public class Main {

public static void main(String[] args) {

HomeRadio radio = new HomeRadio();

radio.on();

radio.showChannel();

radio.nextChannel();

radio.showChannel();

radio.nextChannel();

radio.showChannel();

radio.previousChannel();

radio.showChannel();

radio.off();

}

}

В результате выполнения данной программы получим:

Радио включено

Текущий канал 0

Текущий канал 1

Текущий канал 2

Текущий канал 1

Радио выключено

Класс, реализующий интерфейс, может содержать дополнительные переменные и методы. Это допустимо, более того, именно так в большинстве случаев ступают разработчики. Например, в приведенном ниже варианте класса HomeRadio добавлен конструктор, методы setChannel() и getChannel().

Листинг 3.25

public class HomeRadio implements Radio {

private int channel;

public HomeRadio(int channel) {

this.channel = channel;

}

public void setChannel(int channel) {

this.channel = channel;

}

public int getChannel() {

return channel;

}

@Override

public void on() {

System.out.println("Радио включено");

}

@Override

public void off() {

System.out.println("Радио выключено");

}

@Override

public void nextChannel() {

this.channel++;

}

@Override

public void previousChannel() {

this.channel--;

}

@Override

public void showChannel() {

System.out.println("Текущий канал "+channel);

}

}