Sobes.tech
Back to questions
Junior — Middle
64

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

Companies where asked
Суши ВокСуши Вок
МТС БанкМТС Банк

Answer from AI

sobes.tech 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("Гав")
    }
}

Таким образом, интерфейс задаёт контракт, а абстрактный класс может предоставлять частичную реализацию и хранить состояние.