Назад к вопросам
Суши Вок
МТС Банк
Junior — Middle
65
Каково отличие между интерфейсом и абстрактным классом в контексте объектно-ориентированного программирования?
Компании, где спрашивали
Ответ от нейросети
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("Гав")
}
}
Таким образом, интерфейс задаёт контракт, а абстрактный класс может предоставлять частичную реализацию и хранить состояние.