Почему мы реализуем, например, ICloneable или IDisposable. Я не спрашиваю, что делают ICloneable или IDisposable, но я хочу узнать, что является хорошей причиной для реализации этих интерфейсов, а не просто для написания метода, который располагает или клонирует наши объекты?Почему мы реализуем интерфейсы?
ответ
Использование интерфейсов обеспечивает постоянство использования этих компонентов. Таким образом, когда другой класс хочет/должен использовать ваш класс, он может действовать на нем как клонируемый, одноразовый объект, не беспокоясь о ваших конкретных деталях реализации.
Среди прочего, читайте о блоке using
.
Я думаю, что он используется для удаления объектов без ссылок. Но я не просил этого: хорошо спасибо за ваше время :) – Tarik
Поскольку вы можете использовать тот же код для экземпляров разных классов. Например, процедура очистки формы хочет перебрать все компоненты и уничтожить их. Чтобы это сделать, необходимо обратиться к компонентам через тип: либо общий базовый класс, либо интерфейс. Единственное наследование означает, что общий базовый класс не всегда возможен (предположим, что моя форма имеет как FileStream, так и Button), какой общий базовый класс мог бы иметь, чтобы подпрограмма очистки могла получить к ним доступ?); следовательно, интерфейсы.
Путем реализации хорошо известного интерфейса вы можете иметь полиморфизм, который позволяет вам писать общий код, который может действовать на любой экземпляр класса, реализующего данный интерфейс.
Вы можете проверить Wikipedia article on polymorphism для получения дополнительной информации.
Phoebus дал отличный ответ, но добавил немного больше.
Это заставляет вас писать методы, которые ожидаются для клонирования или создания чего-то, что может быть удалено. Если бы вам пришлось писать только этот метод, всегда ли вы включали бы все необходимые методы, или подпись всегда была бы одинаковой?
Если есть новый фреймворк, и они добавляют что-то, чтобы гарантировать правильность выполнения операций, используя интерфейсы, он заставляет вас внедрять любые новые изменения, так как ваше приложение больше не будет компилироваться.
Таким образом, интерфейс разделяет реализацию и определяет структуру, и эта концепция очень полезна в тех случаях, когда требуется, чтобы реализация была взаимозаменяемой. Кроме того, интерфейс очень полезен, когда реализация меняется часто.
Интерфейс может использоваться для определения общего шаблона, а затем одного или нескольких абстрактных классов для определения частичных реализаций интерфейса.
Интерфейсы просто указывают декларацию метода (неявно публичную и абстрактную) и могут содержать свойства (которые также неявно публичны и абстрактны). Определение интерфейса начинается с интерфейса ключевого слова. Интерфейс, подобный абстрактному классу, не может быть создан.
В дополнение к более мудрым интерфейсам интерфейсы могут использоваться в качестве контрактов между потребительским кодом и кодом обслуживания. Вместо того, чтобы говорить, что это объект, с которым мы будем иметь дело, с интерфейсами, которые есть в соглашении, так выглядит объект, который я возвращаю.В коде, это может быть что-то вроде:
код услуги
public IEnumerable<int> GetNumbers(){ return new []{1,2,3,4,5}; }
код клиента:
var result = serviceProxy.GetNumbers();
Здесь код службы может изменить реализацию для возврата любого класса, который удовлетворяет IEnumerable, не нарушая код клиента ,
Помимо всего этого у вас есть другие приложения, такие как IoC DI, Unit Testing, Object Mocking. Все это приносит пользу полиморфной доброте.
Интерфейс отделяет то, что сделано, от того, как это делается. Клиенты имеют дело с типом интерфейса, не зная, что такое класс реализации, потому что они могут полагаться на контракт, который он применяет.
Это важно для ситуаций, которые генерируют динамические прокси. Клиенты не должны знать, что они имеют дело с прокси-сервером, что дает вам свободу вводить любое поведение, в котором вы нуждаетесь. Это общий метод аспектно-ориентированного программирования.
- 1. Почему мы реализуем интерфейсы рекурсивно?
- 2. почему мы реализуем интерфейс для абстрактного класса
- 3. Как мы реализуем Overlaying?
- 4. Наследуем ли мы или реализуем абстрактные классы?
- 5. как выход, когда мы реализуем интерфейс Servlet
- 6. Почему мы используем интерфейсы вместо протоколов?
- 7. Почему мы реализуем интерфейс маркеров, даже если они не содержат каких-либо методов?
- 8. Наследуем интерфейс или реализуем интерфейс?
- 9. Интерфейсы DAOImpl
- 10. Как мы реализуем «заданный» в сценарии оратора (SpecFlow/BDD/Selenium)?
- 11. Интерфейсы командной строки - почему?
- 12. Почему интерфейсы статичны?
- 13. Почему мы не реализуем все функции из Iterator для реализации итератора?
- 14. мы реализуем объединение пула, но почему это всегда из-за связи?
- 15. Почему мы реализуем View.OnClickListener, если нам нужно установить android: onClick в любом случае?
- 16. Почему мы сначала делаем репозиторий, а затем услуги и снова из хранилища, который мы реализуем? Проверьте код, который вы поймете?
- 17. Интерфейсы по термину API
- 18. Когда использовать абстрактные классы и интерфейсы?
- 19. Почему насмешливо предпочитают интерфейсы?
- 20. Почему нужны интерфейсы Java?
- 21. Зачем использовать интерфейсы, множественное наследование и интерфейсы, преимущества интерфейсов?
- 22. мы можем написать пользовательские интерфейсы маркеров
- 23. классов Анонимных и интерфейсы
- 24. Почему интерфейсы не действуют как классы?
- 25. Почему интерфейсы JDBC имеют объекты
- 26. Почему интерфейсы не сильно типизированы?
- 27. Почему javax.json содержит только интерфейсы?
- 28. Почему я должен использовать интерфейсы?
- 29. Почему мы используем освещение в Pixel Shader?
- 30. Почему интерфейсы Java имеют реализации методов?
Иногда я думал об одном и том же, но я был не совсем уверен, потому что было что-то еще, Но я был прав на мою мысль :) Большое спасибо. – Tarik