Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от AI

Интерфейсът и абстрактният клас са два начина за дефиниране на абстракции в обектно-ориентираното програмиране, но имат ключови разлики:

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

Пример на Swift:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Двигателят е стартиран")
    }
}

// Абстрактен клас в Swift се реализира чрез клас с методи, които трябва да бъдат презаписани
class Animal {
    func makeSound() {
        fatalError("Този метод трябва да бъде презаписан")
    }
}

class Dog: Animal {
    override func makeSound() {
        print("Гав")
    }
}

Така, интерфейсът задава договор, а абстрактният клас може да предоставя частична реализация и да съхранява състояние.