Назад к вопросам
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;
};