В чем смысл интерфейса? - PullRequest
0 голосов
/ 11 марта 2010

Я до сих пор не очень знаком с интерфейсами в Java. Я знаю, что интерфейс говорит, какие методы должны иметь классы, которые реализуют этот интерфейс. Но в чем смысл? Зачем его использовать? Не проще ли создать экземпляр класса, который реализует интерфейс вместо экземпляра интерфейса? Или я что-то важное пропустил?

Ответы [ 4 ]

2 голосов
/ 11 марта 2010

Попробуйте прочитать о "программировании интерфейса" и "инверсии управления".

1 голос
/ 11 марта 2010

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

Это позволяет вам просто сказать, что у вас есть объект, который оказывается обязательным для контракта "List", так что вы знаете, что у вас есть, например. "size ()" и метод "add (...)", которые вы можете затем просто вызвать.

Это может позволить вам скрыть огромное количество сложности за простым интерфейсом. Просто подумай о JDBC Connections ...

1 голос
/ 11 марта 2010

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

Я предпочитаю использовать интерфейсы, чтобы сделать одну из двух вещей:

  1. Показать ортогональные возможности класса
  2. Объявите требования к классу

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

Затем реализуйте класс, который имеет эти методы (реализует этот интерфейс), и передайте его классу, который этого хочет.

Это дает вам хорошую абстракцию и разделение обязанностей.

1 голос
/ 11 марта 2010

Java не поддерживает множественное наследование, но позволяет одному классу реализовывать несколько интерфейсов.

Это позволяет определить функциональность в терминах ожидаемого "контракта", который должен выполнить класс, т.е.оно должно быть перечислимым, оно должно быть сериализуемым и т. д., а не «оно должно быть определенного типа».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...