Пожалуйста, расскажите мне, где интерфейс лучше, чем абстрактный класс в Java.ситуация, когда интерфейс лучше абстрактного класса
ответ
Используйте интерфейс, когда вам не нужно предоставлять какие-либо реализации по умолчанию.
Вот хорошая ссылка сравнивая два: Interface vs. Abstract Class
Вы можете иметь только один прямой абстрактный суперкласс. Поэтому интерфейсы полезны, если вам нужно разоблачить два или более интерфейса.
Интерфейс лучше, чем абстрактный класс, если вы хотите, чтобы несколько классов реализовали этот интерфейс и когда вам не нужно наследовать поведение по умолчанию.
- Класс может реализовывать несколько интерфейсов, но он может распространять только один абстрактный класс.
- Интерфейсы позволяют создавать прокси-серверы, которые инкапсулируют конкретный класс. Это широко используется каркасами, чтобы перехватывать вызовы методов конкретному классу (например, для запуска транзакции до выполнения метода или для записи в журнал).
Java не имеет множественного наследования; таким образом, вы не можете иметь класс, который реализует сразу два абстрактных класса. Например, если вы хотите использовать MouseListener
и ActionListener
в одном классе, вы должны сделать это способом интерфейса.
Я думаю, вы неправильно поняли реальное значение интерфейса и абстрактного класса.
Интерфейс представляет собой структуру программирования, в которой вы определяете свои функции/службы, которые вы хотите открыть публичным или другим модулям. Вид контракта, в котором вы обещаете, что предоставляете некоторые функции или услуги, но скрываете реализацию, чтобы можно было изменить реализацию, не затрагивая ваш контракт.
Абстрактный класс - частично реализованный класс, и он не имеет никакого реального смысла, кроме как служить родительским для нескольких дочерних классов с реальным значением. Абстрактный класс - это специальный родительский класс, который предоставляет функциональные возможности по умолчанию для нескольких дочерних классов. он создается как абстрактный из-за недоступности подходящего конкретного родительского класса.
В хорошем дизайне вы всегда должны создавать интерфейс. Но абстрактный класс не является обязательным. Если вы не можете найти конкретный родительский класс, создайте абстрактный класс и реализуйте интерфейс, тогда предоставьте реализацию по умолчанию для этих функций интерфейса (если это возможно), иначе отметим их как абстрактные функции и оставьте реализацию дочерними классами.
Чтобы предоставить WebServices или выполнить тесты JMock, вам не нужна фактическая реализация, вам просто потребуется определение интерфейса. Подумайте об этом, нет необходимости возвращать реализацию третьей стороне, когда все, что им нужно сделать, это вызвать ваш API.
Когда вам нужно реализовать в любом классе, потому что интерфейс может быть реализован в любом классе или интерфейсе, но абстрактный класс не может сделать это, например. в Applet всегда класс Applet распространяется в нашем приложении Applet, в этом случае мы не можем расширить абстрактный класс.
- 1. Когда мне нужно использовать интерфейс и когда для абстрактного класса?
- 2. абстрактного класса не реализует интерфейс
- 3. почему мы реализуем интерфейс для абстрактного класса
- 4. Интерфейс с реализацией без абстрактного класса?
- 5. Интерфейс, абстрактный класс и методы абстрактного класса
- 6. Частично защищенный интерфейс, но без абстрактного класса
- 7. Зачем нам нужен интерфейс, когда то же самое, что и интерфейс, может быть достигнуто путем абстрактного абстрактного класса?
- 8. Есть ли ситуация, когда DataSet лучше, чем использование EF?
- 9. Почему класс абстрактного класса, когда нет абстрактного метода
- 10. Интерфейс против статического абстрактного класса, при объявлении parcelable слушателя
- 11. частичная реализация абстрактного метода абстрактного класса
- 12. Сериализация абстрактного класса
- 13. Вызов абстрактного метода из родительского абстрактного класса
- 14. Отличие от абстрактного и не абстрактного класса
- 15. Кэширование propertyinfo абстрактного класса
- 16. Должен ли я создать интерфейс для абстрактного класса?
- 17. Как реализовать интерфейс для абстрактного класса, который является ограничением?
- 18. испытания конкретный метод абстрактного класса, содержащего интерфейс вызова
- 19. Непатентованные: Наследование от абстрактного класса, который реализует интерфейс
- 20. Тип списка сбрасывания для абстрактного класса, реализующего общий интерфейс
- 21. Ошибка для абстрактного класса: класс, интерфейс или перечисление ожидается
- 22. Замена абстрактного базового класса на интерфейс в IntelliJ
- 23. Usercontrol, полученный из абстрактного класса
- 24. Стандарт кодирования интерфейса/абстрактного класса
- 25. Смысл не абстрактного метода абстрактного класса
- 26. Deserializing абстрактного класса в Gson
- 27. Какая лучшая техническая ситуация для использования интерфейса?
- 28. , когда абстрактный класс не содержит абстрактного метода
- 29. создать объект абстрактного класса! = Создать экземпляр абстрактного класса?
- 30. Преимущества использования абстрактного класса интерфейса?
Возможный дубликат [Интерфейс vs Абстрактный класс (общий OO)] (http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo) –
Возможный дубликат [Абстрактный класс vs Интерфейс в Java] (http://stackoverflow.com/questions/10040069/abstract-class-vs-interface-in-java) – nawfal