0Pricing
Swift Academy · Урок

override, final и запрет наследования

Переопределяйте методы и свойства и запрещайте наследование классов с помощью final.

«override, final и запрет наследования» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

Ключевое слово `override` позволяет подклассам заменять реализации суперкласса. `final` запрещает дальнейшее переопределение или создание подклассов, защищая контракт вашего API.

Переопределение методов

```swift class Animal { func speak() { print("...") } } class Cat: Animal { override func speak() { print("Meow") } } Cat().speak() // "Meow" ``` `override` обязательно — компилятор отклоняет случайное сокрытие метода.

Переопределение свойств

```swift class Shape { var area: Double { 0 } } class Square: Shape { var side: Double init(_ s: Double) { side = s } override var area: Double { side * side } } print(Square(4).area) // 16 ```

Вызов super при переопределении

```swift class Logger { func log(_ msg: String) { print("[LOG] \(msg)") } } class TimedLogger: Logger { override func log(_ msg: String) { print(Date(), terminator: " ") super.log(msg) } } ```

Методы и свойства, объявленные как `final`

Пометьте метод или свойство как `final`, чтобы запретить его переопределение: ```swift class BankAccount { final func transfer(amount: Double) { ... } // cannot override var balance: Double = 0 } ```

Классы, объявленные как `final`

Объявите весь класс как `final`, чтобы запретить создание подклассов: ```swift final class Singleton { static let shared = Singleton() private init() {} } // class Sub: Singleton { } ❌ ``` `final` также позволяет выполнять оптимизацию: компилятор может статически диспетчеризировать вызовы.

Зачем использовать `final`

Преимущества `final`: 1. Производительность: статическая диспетчеризация вместо поиска в таблице виртуальных методов 2. Безопасность: контракт API соблюдается — подклассы не могут нарушить инварианты 3. Документирование: показывает, что класс не предназначен для наследования

Переопределение вычисляемых свойств

```swift class Vehicle { var description: String { "Vehicle" } } class Tesla: Vehicle { override var description: String { "Tesla - " + super.description } } print(Tesla().description) // "Tesla - Vehicle" ```

Переопределение наблюдателей свойств

```swift class A { var x = 0 } class B: A { override var x: Int { didSet { print("B.x changed to \(x)") } } } var b = B() b.x = 5 // "B.x changed to 5" ```

Предотвращение случайного переопределения

Без `override` случайное сокрытие метода приводит к ошибке компиляции: ```swift class Parent { func greet() { } } class Child: Parent { func greet() { } // ❌ must write 'override' } ``` Это защищает от незаметных ошибок при изменении API родительского класса.

Быстрая проверка

Какое ключевое слово запрещает создание подклассов класса?

Повторение

Основные выводы: • `override` требуется при замене метода или свойства суперкласса • `super.method()` вызывает версию родительского класса • `final func/var` — запрещает переопределение конкретного элемента • `final class` — запрещает любое создание подклассов • `final` включает статическую диспетчеризацию — это бесплатный прирост производительности Далее: приведение типов с помощью `is`, `as?`, `as!`

Часто задаваемые вопросы

Урок «override, final и запрет наследования» бесплатный?

Да — полный текст урока «override, final и запрет наследования» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «override, final и запрет наследования»?

Переопределяйте методы и свойства и запрещайте наследование классов с помощью final. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «override, final и запрет наследования»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Наследование классов и ключевое слово super
  2. override, final и запрет наследования
  3. Приведение типов: is, as?, as! и as
  4. Деинциализаторы и жизненный цикл памяти
← Назад к Swift Academy