Это сообщение в блоге является ответом на вопрос студента об абстрактных классах и интерфейсах Java.
- В чем разница между абстрактными классами и интерфейсами?
- Когда вы используете одно вместо другого?
Разница
- Каждый класс будет расширять один абстрактный класс. Примером может служить класс Housecat, расширяющий один абстрактный класс Cat.
- Каждый класс может иметь несколько интерфейсов. Тот же класс Housecat может иметь интерфейсы Animal, Mammal и Domestic Pet.
- Методы абстрактных классов могут иметь реализацию (тело). Их задача – установить методы по умолчанию для подклассов. Существуют различные типы методов, которые можно использовать, включая абстрактные (без тела), статические и методы по умолчанию.
- Интерфейсы могут иметь только абстрактные методы (никто).
Я собираюсь показать, когда использовать каждый из них, на нескольких примерах.
Пример 1
Представьте, что у вас есть классы Домашняя кошка, Тигр, Муравей и Человек. У вас может быть абстрактный класс Animal для добавления функциональности и свойств, который используется всеми подклассами. Затем у вас может быть интерфейс Cat для классов типа cat и интерфейс Mammal для всех классов, кроме ant.
В этом примере Housecat расширяет абстрактный класс Cat, интерфейс Cat и интерфейс Mammal.
Пример 2
Представьте, что у вас есть автомобиль Ford Mustang и грузовик Chevy Tahoe. Вы можете создать абстрактный класс транспортного средства, чтобы расширить оба класса. Вы можете создать интерфейс для легковых и грузовых автомобилей, чтобы расширить каждый класс. Преимущество этого заключается в том, что если вы покупаете грузовик Ford, вы можете расширить интерфейс грузовика, чтобы придать ему функциональность грузовика.
Пример 3
Представьте, что вы печете торт. В интерфейсе перечислены только ингредиенты для торта. В абстрактном классе перечислены не только ингредиенты, но и инструкции и картинки о том, как их испечь.
Дополнительные ресурсы:
- Дополнительные ресурсы:
- Видео об интерфейсе и наследовании: https://www.youtube.com/watch?v=mSjAJn4hUqg&feature=youtu.be
- Быстрые информационные Абстрактные классы. Быстрые информационные Абстрактные классы.
- Быстрая информация об интерфейсах. Быстрая информация об интерфейсах.
Если у вас есть лучшие примеры или лучшее объяснение, пожалуйста, ответьте в комментариях, чтобы мы все могли учиться.
Оригинал: “https://dev.to/jcsmileyjr/difference-in-java-abstract-classes-vs-interfaces-14bp”