Sobes.tech
Назад к вопросам
Junior — Middle
71

Объясни, чем отличаются абстрактные классы и интерфейсы с точки зрения реализации наследования в объектно-ориентированном программировании

Компании, где спрашивали
IBS

Ответ от нейросети

sobes.tech AI

Абстрактный класс — это класс, который содержит хотя бы одну чисто виртуальную функцию (без реализации), и его нельзя инстанцировать напрямую. Он может содержать как реализованные, так и абстрактные методы, а также поля.

Интерфейс — это класс, который содержит только чисто виртуальные функции и не содержит состояния (полей). В языках вроде Java или C# интерфейс — это контракт, который класс должен реализовать.

В C++ интерфейс обычно реализуется как абстрактный класс с только чисто виртуальными методами и без полей.

Основные отличия:

  • Абстрактный класс может содержать реализацию методов и поля, интерфейс — нет.
  • Класс может наследоваться только от одного абстрактного класса (в языках с одиночным наследованием), но может реализовывать несколько интерфейсов.

Пример на C++:

class Interface {
public:
    virtual void foo() = 0; // чисто виртуальная функция
    virtual ~Interface() {}
};

class AbstractClass {
public:
    virtual void foo() = 0;
    void bar() { /* реализация */ }
    int data;
};