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

Ответ

Да, 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) не поддерживают наследование.

Ответ 18+ 🔞

А, ну ты про наследование в Swift спрашиваешь! Ну, поддерживает, блядь, конечно поддерживает, не идиотский же язык в конце концов. Это ж как в жизни: папаша что-то накопил — сынок получает по наследству, только без судов и распиздяйства с документами.

Вот смотри, как это просто, ёпта:

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 // Смотри-ка, на папиной тачке гоняет! Унаследовал, блядь.
bike.makeSound()        // И сигналит папиным гудком!

А теперь главные фишки, чтобы не облажаться:

  1. Один папа на всех: Как в природе, блядь. Не может же человек быть сыном сразу и Ивана, и Петра, и Сидора. Так и класс — наследуется только от одного суперкласса. Многодетность — это уже про протоколы, но это другая история, нахуй.

  2. Переопределение — это сила, но и ответственность, блядь. Не нравится, как папаша делает — сделай по-своему, но предупреди всех словом override. А то мало ли.

    class Train: Vehicle {
        override func makeSound() { // Всё, старый гудок в пизду!
            print("Choo Choo!") // Теперь будет «Ту-тууу!», как у порядочного паровоза!
        }
    }
  3. Запретить наследство — святое право. Вдруг ты создал шедевр, а какой-то распиздяй его унаследует и всё просрёт? Поставь final и спи спокойно, ебать.

    final class FinalClass { } // Этот класс — неприступная крепость. Наследников не будет. Точка.
  4. А вот это важно, блядь, запомни как «Отче наш»: Наследование — только для классов (class). Структуры (struct) и перечисления (enum) — они сами по себе ударники, индивидуалисты, хуле. Не поддерживают эту семейную тягомотину. Хочешь повторно использовать код — там другие приёмы, композиция например.

Короче, наследуй на здоровье, но без фанатизма. А то наследуешься, переопределишь всё подряд, а потом сидишь и думаешь: «И чё я, блядь, наваял?».