Sobes.tech
Back to questions
Junior — Middle
131

Какие отличия существуют между абстрактным классом и интерфейсом в объектно-ориентированном программировании?

Companies where asked
Grotem

Answer from AI

sobes.tech AI

Абстрактный класс и интерфейс — два способа описания контрактов и поведения в объектно-ориентированном программировании, но с разными особенностями:

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

Отличия:

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

Пример на Dart (Flutter):

abstract class Animal {
  void eat(); // абстрактный метод
  void sleep() {
    print('Sleeping'); // метод с реализацией
  }
}

// Интерфейс в Dart — это класс с только абстрактными методами
abstract class Flyable {
  void fly();
}

class Bird extends Animal implements Flyable {
  @override
  void eat() {
    print('Bird is eating');
  }

  @override
  void fly() {
    print('Bird is flying');
  }
}