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

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

доступ class имя_класса [extends суперкласс] [implements интерфейс [, интерфейс.... ] ] {
// тело_класса
}

Если класс реализует более одного интерфейса, имена интерфейсов разделяются запятыми. Если класс реализует два интерфейса, которые объявляют один и тот же метод, то один и тот же метод будет использоваться клиентами любого интерфейса. Методы, которые реализуют интерфейс, должны быть объявлены как public. Кроме того, сигнатура типа реализующего метода должна в точности совпадать с сигнатурой типа, указанной в определении interface.

Рассморим небольшой пример класса, который реализует приведенный ранее интерфейс Callback.

class Client implements Callback {
// Реализует интерфейс Callback
public void callback(int p) {
System.out.println("Метод callback, вызванный со значением " + p) ;
}
}

Обратите внимание, что метод callback () объявлен с использованием спецификатора доступа public.

Помните! При реализации метода интерфейса он должен быть объявлен как public.

Вполне допустима и достаточно распространена ситуация, когда классы, которые реализуют интерфейсы, определяют собственные дополнительные члены. Например, следующая версия класса Client реализует метод callback() и добавляет метод nonlnfaceMeth():

class Client implements Callback {
// Реализует интерфейс Callback
public void callback(int p) {
System.out.println("Метод callback, вызванный со значением " + p) ;
void nonlfaceMeth() {
System.out.println("Классы, которые реализуют интерфейсы" + "могут определять также и другие члены.");
}
}