Junior — Middle
90
Объектілі-бағдарланған бағдарламалауда мұрагерлікті жүзеге асыру тұрғысынан абстрактілі кластар мен интерфейстердің айырмашылығы неде?
Сұралған компаниялар
IBS
AI-дан жауап
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;
};