Чем отличается абстрактный класс от интерфейса?

В программировании используются понятия абстрактного класса и интерфейса. В чем заключаются их особенности? Чем отличается абстрактный класс от интерфейса?

Содержание статьи

В чем специфика абстрактного класса в программировании?

В числе основных признаков абстрактного класса — наличие реализации. При этом в нем может присутствовать один или несколько ее методов. В абстрактном классе есть свойства, имеющие модификаторы доступа. Кроме того, рассматриваемая категория данных предполагает:

  1. применение метода extend;
  2. описание конструктора;
  3. использование разных типов данных — в частности, статических, или же констант;
  4. независимость реализации наследуемого абстрактного класса от родительского.
к содержанию ↑

Что такое интерфейс?

Интерфейс, в свою очередь, не содержит реализации. В нем присутствует описание в чистом виде — как совокупность методов, подлежащих реализации в конкретном классе, посредством которого осуществляется имплементация того или иного интерфейса.

Рассматриваемая категория данных также предполагает:

  1. наличие только тех констант, которые классифицируются как общедоступные;
  2. применение метода implement;
  3. воспроизведение всех методов интерфейса в процессе его реализации.

Отметим, что в интерфейсе не осуществляется описание конструктора.

к содержанию ↑

Разница между абстрактным классом и интерфейсом

Очевидно, что есть не одно отличие абстрактного класса от интерфейса. Разница между ними прослеживается в самых разных аспектах. Наиболее наглядно их можно увидеть при сопоставлении абстрактного класса и интерфейса по следующим основным критериям:

  • наследование;
  • реализация;
  • использование конструктора.

Отобразить то, в чем разница между абстрактным классом и интерфейсом прослеживается в соотнесении с отмеченными критериями, нам поможет небольшая таблица.

к содержанию ↑

Сравнительная таблица

Абстрактный классИнтерфейс
Только один абстрактный класс наследуется иным классомНесколько интерфейсов может быть реализовано каким-либо классом
Допускает реализацию методовПредполагает исключительно описание методов
Допускает создание конструктораНе предполагает создания конструкторов