Sobes.tech
Middle

Каква е разликата между абстрактен клас и интерфейс?

sobes.tech AI

Отговор от AI

Абстрактен клас — това е клас, който може да съдържа както реализирани методи, така и абстрактни (без реализация). Той служи като база за наследяване и може да съдържа състояние (поля).

Интерфейс — това е договор, който определя набор от методи без реализация (в класическия смисъл). Класът, реализиращ интерфейса, трябва да реализира всички негови методи.

Основни разлики:

  • Абстрактният клас може да съдържа реализация и състояние, интерфейсът — само сигнатури на методи (в някои езици интерфейсите могат да съдържат дефолтни методи).
  • Един клас може да наследи само от един абстрактен клас, но може да реализира няколко интерфейса.
  • Абстрактният клас задава частична реализация, интерфейсът — само договор.

Пример на Java:

abstract class Animal {
    void eat() { System.out.println("Яде"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Чурулика"); }
    public void fly() { System.out.println("Лети"); }
}