Мне было интересно, как вы, ребята, решаете, когда использовать абстрактный или интерфейсный класс во время разработки приложения, так как оба они предоставляют аналогичные функции с незначительной разницей. Я ценю любую помощь. Благодарю.php: Когда использовать абстрактный и интерфейсный класс?
ответ
Когда я разрабатываю и пытаюсь решить, использовать ли интерфейс или абстрактный класс, я обычно думаю о том, будут ли классы, которые будут наследоваться, содержать только одну и ту же структуру (методы, свойства и т. Д.), Но разные реализации.
если реализация методов будет отличаться, но я хочу обеспечить одинаковость со структурной точки зрения, я использую интерфейс. если структура и реализация одинаковы, я склонен использовать абстрактные классы.
Не понятно, почему: если структура и реализация те же, я склонен использовать абстрактные классы, вы используете абстрактный класс, если нужна такая же структура и реализация? –
@RNKushwaha, я имею в виду, что если я хочу поделиться идентичной реализацией метода/свойства между несколькими наследующими классами, я бы создал абстрактный класс, чтобы реализация могла жить в абстрактном классе. Интерфейсы не позволяют реализовать. Это имеет смысл? –
Я использую абстрактные классы, когда хочу, чтобы наследующие классы наследовали некоторые функции и интерфейсы, когда я хочу установить минимальные структурные критерии для группы классов.
Следует помнить, что любой данный класс может «наследовать» (технически реализовать) множество интерфейсов, но только один подкласс (быть абстрактным или нет).
Языки, такие как PHP, поддерживают реализацию нескольких интерфейсов, но не наследуют несколько классов, и это часто является частью решения - будет ли ваш класс поддерживать множественные действия (интерфейсы) или будет действовать как один тип вещи (базовый класс)?
Существует также вопрос о том, как реализована базовая функциональность. Если вы используете такой подход, как template method pattern, где у вас есть общий код реализации для всех производных классов, вы захотите использовать абстрактный базовый класс.
Используйте абстракцию, если у вас есть методы по умолчанию (с сопроводительным кодом) для наследников. Используйте интерфейсы, если вам просто нужно убедиться, что классы, наследующие от этого родителя, должны реализовать все определенные методы. Осторожно: используйте абстрактные классы и интерфейсы только в том случае, если вы намерены применять структуру и организацию (обычно с командой). Накладные расходы.
Вот хорошая статья, объясняющая концепцию интерфейса и почему ее использовать и как объявить абстрактные классы в PHP. Хотя она не различает, когда использовать обе концепции.
Understanding and Applying (Interfaces) Polymorphism in PHP
, когда вам требуется определенная функциональность, требуется - используйте интерфейс. Но если вы хотите некоторые дополнительные функции - используйте абстрактный класс. например, если isi (индийский стандартный институт) устанавливает стандарты для компьютерного монитора с функциональностью (он должен иметь) - дисплей, кнопка питания, настройка контрастности. если все 3 функции являются обязательными, то используйте интерфейс, который связал компанию-производителя монитора, чтобы реализовать все 3 функции. если какой-либо дополнительный, то используйте абстрактный класс.
- 1. когда использовать абстрактный класс и когда использовать интерфейс в C#
- 2. Когда использовать абстрактный класс и когда использовать интерфейс в .NET
- 3. абстрактный класс расширяет абстрактный класс в php?
- 4. PHP InstanceOf и абстрактный класс
- 5. Когда использовать абстрактный класс без интерфейса?
- 6. абстрактный класс в PHP
- 7. как использовать абстрактный класс
- 8. Вложенный абстрактный класс и возвращающий абстрактный класс
- 9. Класс, не возвращающий интерфейсный экземпляр PHP
- 10. Интерфейсный класс в C#
- 11. Когда мне нужно использовать абстрактный класс и интерфейс в Java?
- 12. Java- Как использовать абстрактный класс
- 13. Абстрактный класс от PHP-скрипта?
- 14. Абстрактный класс и объект
- 15. Что такое АБСТРАКТНЫЙ КЛАСС и ИНТЕРФЕЙС, и когда вы будете использовать их в PHP?
- 16. абстрактный класс конфликт в PHP
- 17. Обратный и абстрактный класс?
- 18. абстрактный класс и ArrayList
- 19. шаблон и абстрактный класс
- 20. Дженерики и абстрактный класс
- 21. Абстрактный класс и конструктор
- 22. Указатель и абстрактный класс
- 23. , когда абстрактный класс не содержит абстрактного метода
- 24. Когда использовать абстрактный заводской шаблон?
- 25. Когда только абстрактный класс, но не интерфейс
- 26. Php, когда использовать последний класс
- 27. , когда использовать абстрактный заводской шаблон?
- 28. Абстрактный базовый класс имеет абстрактный вложенный класс
- 29. чистый абстрактный класс и интерфейс
- 30. C++, абстрактный класс и наследование
Возможный дубликат [interface vs abstract class] (http://stackoverflow.com/questions/1814821/interface-vs-abstract-class) – VolkerK
Возможный дубликат [PHP: В чем разница между интерфейсом и абстрактным классом ?] (http://stackoverflow.com/questions/1913098/php-what-is-the-difference-between-an-interface-and-abstract-class) – Gordon