Теория 📔
May 5, 2023

😱 Абстрактный класс и интерфейс

Проходя тех интервью в WildBerries рекрутер задал мне весьма интересный вопрос:

В чём отличие абстрактного класса и интерфейса

Вопрос весьма интересный, так что я решил написать краткую заметку на эту тему.

Абстрактный класс - это класс, который не может быть создан в виде объекта, он используется для создания классов-наследников, которые могут наследовать его свойства и методы. Абстрактный класс может содержать как абстрактные методы, так и реализованные методы. Абстрактные методы не имеют тела и должны быть реализованы в классах-наследниках.

В то время как

Интерфейс - это набор методов и свойств, которые должны быть реализованы в классах, которые реализуют этот интерфейс. Интерфейс не содержит реализации методов, только их сигнатуры. Класс, который реализует интерфейс, обязан реализовать все методы, которые описаны в интерфейсе.

А теперь остановимся на каждом поподробнее.

Абстрактный класс

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

Абстрактный класс может содержать абстрактные методы, которые не имеют определения в самом классе, но должны быть реализованы в наследниках. Также абстрактный класс может содержать обычные методы и свойства, которые могут использоваться как в абстрактном классе, так и в его наследниках.

Абстрактный класс можно использовать для создания иерархии классов с общими свойствами и методами, но без определения их реализации.

Это упрощает и ускоряет процесс создания новых классов, так как наследникам не нужно заново описывать общие свойства и методы, они могут просто наследовать их от абстрактного класса.

Интерфейс

Интерфейс в ООП (объектно-ориентированном программировании) - это абстрактный класс, который содержит только абстрактные методы и константы, но не имеет реализации. Интерфейс определяет набор методов, которые должны быть реализованы в классе-наследнике.

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

Заключение

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