Учебники

34) Интерфейс Java

Что такое интерфейс?

Интерфейс похож на Java Class, но у него есть только статические константы и абстрактный метод. Java использует интерфейс для реализации множественного наследования. Класс Java может реализовывать несколько интерфейсов Java. Все методы в интерфейсе неявно общедоступны и абстрактны.

Синтаксис для объявления интерфейса

interface {
//methods
}

Чтобы использовать интерфейс в вашем классе, добавьте ключевое слово «Implements» после имени вашего класса, а затем имя интерфейса.

Пример реализации интерфейса

class Dog implements Pet
interface RidableAnimal extends Animal, Vehicle

Нажмите здесь, если видео не доступно

Зачем нужен интерфейс?

Чтобы лучше понять концепцию Java Interface, давайте рассмотрим пример. Класс «Media Player» имеет два подкласса: CD-проигрыватель и DVD-проигрыватель. У каждого свой уникальный метод реализации для воспроизведения музыки.

Как использовать интерфейсы в Java

Другой класс «Combo Drive» наследует как CD, так и DVD (см. Изображение ниже). Какой метод игры он должен наследовать? Это может вызвать серьезные проблемы с дизайном. И, следовательно, Java не допускает множественного наследования.

Как использовать интерфейсы в Java

Теперь давайте возьмем другой пример с собакой.

Предположим, у вас есть требование, где класс «собака» наследует класс «животное» и «домашнее животное» (см. Изображение ниже). Но вы не можете расширить два класса в Java. Так что бы вы сделали? Решение — интерфейс.

Как использовать интерфейсы в Java

Книга правил для интерфейса говорит,

  • Интерфейс на 100% абстрактный класс и имеет только абстрактные методы.
  • Класс может реализовывать любое количество интерфейсов.

Класс Dog может расширяться до класса «Animal» и реализовывать интерфейс как «Pet».

Как использовать интерфейсы в Java

Пример интерфейса Java:

Шаг 1) Скопируйте следующий код в редактор.

interface Pet{
  public void test();
}
class Dog implements Pet{
   public void test(){
     System.out.println("Interface Method Implemented");
  }
   public static void main(String args[]){
     Pet p = new Dog();
     p.test();
  }
}

Шаг 2) Сохраните, скомпилируйте и запустите код. Соблюдайте вывод.

Разница между классом и интерфейсом

Учебный класс
Интерфейс
В классе вы можете создать экземпляр переменной и создать объект. В интерфейсе вы не можете создать экземпляр переменной и создать объект.
Класс может содержать конкретные (с реализацией) методы Интерфейс не может содержать конкретные (с реализацией) методы

Спецификаторы доступа, используемые с классами, являются частными, защищенными и общедоступными.

В интерфейсе используется только один спецификатор — Public.

Когда использовать интерфейс и абстрактный класс?

  • Используйте абстрактный класс, когда необходимо определить шаблон для группы подклассов
  • Используйте интерфейс, когда нужно определить роль для других классов, независимо от дерева наследования этих классов

Должен знать факты об интерфейсе

  • Класс Java может реализовывать несколько интерфейсов Java. Необходимо, чтобы класс реализовал все методы, объявленные в интерфейсах.
  • Класс должен переопределять все абстрактные методы, объявленные в интерфейсе
  • Интерфейс позволяет отправлять сообщение объекту без учета того, к каким классам он принадлежит.
  • Класс должен предоставлять функциональность для методов, объявленных в интерфейсе.
  • Все методы в интерфейсе неявно являются публичными и абстрактными.
  • Интерфейс не может быть создан
  • Ссылка на интерфейс может указывать на объекты его реализующих классов
  • Интерфейс может расширяться от одного или нескольких интерфейсов. Класс может расширять только один класс, но реализовывать любое количество интерфейсов
  • Интерфейс не может реализовать другой интерфейс. Он должен расширить другой интерфейс, если это необходимо.
  • Интерфейс, который объявлен внутри другого интерфейса, называется вложенным интерфейсом.
  • Во время объявления переменная интерфейса должна быть инициализирована. В противном случае компилятор выдаст ошибку.
  • Класс не может реализовать два интерфейса в Java, которые имеют методы с одинаковым именем, но с разным типом возврата.

Резюме :

  • Класс, который реализует интерфейс, должен обеспечивать функциональность для методов, объявленных в интерфейсе.
  • Все методы в интерфейсе неявно являются публичными и абстрактными.
  • Интерфейс не может быть создан
  • Ссылка на интерфейс может указывать на объекты его реализующих классов
  • Интерфейс может расширяться от одного или нескольких интерфейсов. Класс может расширять только один класс, но реализовывать любое количество интерфейсов.