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

# полиморфизм



https://stackoverflow.com/questions/10311571/dependency-injection-with-interfaces-or-classes



https://stackoverflow.com/questions/9446502/dependency-injection-using-interfaces

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

О: если это все, для чего вам нужен интерфейс, то не используйте его. Вы используете интерфейс, когда у вас есть программа, которая хочет игнорировать каждый аспект класса и обращаться к нему по его базовому типу, то есть по интерфейсу. Им не нужно знать какие-либо подклассы, достаточно того, что это тип интерфейса. Таким образом, вы можете вызвать реализованный метод подкласса через ссылку на интерфейс объекта. Это основное наследование и дизайн.

О: При написании тестов вы обнаружите, что конкретные классы не будут работать в вашей тестовой среде.

Пример. Вы хотите протестировать класс, который зависит от класса Службы доступа к данным. Если этот класс общается с веб-службой или базой данных — ваш модульный тест не будет работать в вашей тестовой среде (плюс он превратился в интеграционный тест).

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