Поддерживает ли Swift наследование классов?

«Поддерживает ли Swift наследование классов?» — вопрос из категории ООП, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, Swift поддерживает наследование классов. Это механизм, при котором один класс (подкласс, child class) может наследовать свойства, методы и другие характеристики другого класса (суперкласса, parent class).

Базовый пример:

class Vehicle { // Суперкласс
    var currentSpeed = 0.0
    func makeSound() {
        print("Some generic vehicle sound")
    }
}

class Bicycle: Vehicle { // Подкласс
    var hasBasket = false
}

let bike = Bicycle()
bike.currentSpeed = 15.0 // Свойство унаследовано от Vehicle
bike.makeSound()        // Метод унаследован от Vehicle

Ключевые особенности наследования в Swift:

  1. Одиночное наследование: Класс может наследоваться только от одного суперкласса.
  2. Переопределение: Подкласс может предоставить свою собственную реализацию метода, свойства, инициализатора или сабскрипта суперкласса, используя ключевое слово override.
    class Train: Vehicle {
        override func makeSound() {
            print("Choo Choo!")
        }
    }
  3. Запрет наследования: Ключевое слово final предотвращает переопределение метода/свойства или наследование от всего класса.
    final class FinalClass { } // Этот класс не может иметь подклассов
  4. Только для классов: Структуры (struct) и перечисления (enum) не поддерживают наследование.