Рубрики
Без рубрики

Разница в абстрактных классах Java и интерфейсах

Это сообщение в блоге является ответом на вопрос студента об абстрактных классах и интерфейсах Java…. С пометкой java, codenewbie.

Это сообщение в блоге является ответом на вопрос студента об абстрактных классах и интерфейсах Java.

  1. В чем разница между абстрактными классами и интерфейсами?
  2. Когда вы используете одно вместо другого?

Разница

  • Каждый класс будет расширять один абстрактный класс. Примером может служить класс 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://dev.to/jcsmileyjr/difference-in-java-abstract-classes-vs-interfaces-14bp”