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("Гав")
}
}
Така, интерфейсът задава договор, а абстрактният клас може да предоставя частична реализация и да съхранява състояние.