Подтвердить что ты не робот

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

В Java для реализации множественного наследования мы используем интерфейсы. Это единственное использование интерфейсов? Если да, какое основное использование интерфейса в Java? Зачем нужны интерфейсы в Java?

4b9b3361

Ответ 1

Я бы сказал, что основное использование - это полиморфизм или способность выполнять одну и ту же операцию на нескольких разных объектах. Если разные объекты реализуют один и тот же интерфейс и имеют один и тот же метод, вы можете хранить все эти объекты в векторе, например, и перебирать вектор, вызывающий этот метод для каждого из них.

Ответ 2

Я также думал о том, как используются интерфейсы. Я надеюсь, что это поможет другим:

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

Во-вторых, Java не поддерживает множественное наследование (тогда как C++ делает). Множественное наследование позволяет вам получить подкласс из более чем один прямой суперкласс. Это создает проблему, если два прямых суперклассы имеют конфликтующие реализации. (Какой следовать в подкласс?). Однако множественное наследование имеет свое место. Java делает это, позволяя вам "реализовывать" более одного интерфейсы (но вы можете "расширять" только один суперкласс). Поскольку интерфейсы содержат только абстрактные методы без актуальных реализация не может возникнуть конфликт между несколькими интерфейсами. (Интерфейс может содержать константы, но не рекомендуется. Если подкласс реализует два интерфейса с конфликтующими константами, компилятор выдаст ошибку компиляции.)

из: http://www.ntu.edu.sg/home/ehchua/programming/java/J3b_OOPInheritancePolymorphism.html#zz-6.6

Ответ 3

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

Интерфейс позволяет представить соглашение между классами о том, как они будут разговаривать друг с другом, не привязавшись к фактическим реализациям.

Это позволяет нам заменять реализации другими (очень полезно для тестирования или изменения вариантов использования) без изменения скомпилированного кода.

Ответ 4

Вам нужны они, чтобы вы могли вводить объекты вне иерархии.

Например, объекты, которые можно сравнить, могут быть в любом месте иерархии объектов - им не нужно иметь общий предок, который можно сравнить. String можно сравнить, Integer можно сравнить, вы могли бы даже сделать свой собственный Frame, который можно было бы сравнить (скажем, кадр "меньше", чем другой, если он больше на переднем плане, т.е. если он будет перекрывать другой кадр). Таким образом, если вы хотите ссылаться на вещь, которую можно сравнить, вам придется объявить переменную с самым общим предком - в этом случае Object. Это слишком общее, потому что тогда оно также может получать значения, которые не сопоставимы (и будут вызывать ошибки при попытке сравнить их).

Таким образом, интерфейс Comparable: он выбирает все классы, реализующие функции сравнения по иерархии подкласса-суперкласса.

Ответ 5

Некоторые коды не будут компилироваться без него.

Например, в:

for (String name : list)
{
    System.out.print("\nIn foreach loop: name: " + name);
}

list должен реализовать java.lang.Iterable interface.