Sobes.tech
Junior — Middle

Nesne yönelimli programlamada kalıtım uygulaması açısından soyut sınıflar ile arayüzlerin farklarını açıklayın.

sobes.tech yapay zeka

AI'dan gelen yanıt

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

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

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

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

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

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

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

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