Sobes.tech
Junior — Middle

Фарқиятҳои байни синфи абстрактӣ ва интерфейс дар барномасозии объектӣ-равона чӣҳоянд?

sobes.tech AI

Ҷавоб аз AI

Класи абстракт і інтерфейси — два способи опису контрактів і поведінки в об'єктно-орієнтованому програмуванні, але з різними характеристиками:

  • Абстрактний клас може містити абстрактні методи (без реалізації), а також методи з реалізацією і поля (стан). Він служить базовим класом, від якого можна успадковувати.
  • Інтерфейс описує тільки підписи методів (контракт), не містить стан і зазвичай не містить реалізацію (хоча в деяких мовах можливі методи за замовчуванням).

Відмінності:

  • Клас може успадковувати тільки від одного абстрактного класу, але реалізовувати кілька інтерфейсів.
  • Абстрактний клас може мати конструктори, інтерфейс — ні.
  • Абстрактний клас використовується, коли потрібно частково реалізувати функціональність, інтерфейс — коли потрібно задати тільки контракт.

Приклад на Dart (Flutter):

abstract class Animal {
  void eat(); // абстрактний метод
  void sleep() {
    print('Спить'); // метод з реалізацією
  }
}

// Інтерфейс у Dart — це клас з тільки абстрактними методами
abstract class Flyable {
  void fly();
}

class Bird extends Animal implements Flyable {
  @override
  void eat() {
    print('Птах їсть');
  }

  @override
  void fly() {
    print('Птах летить');
  }
}