Ответ
Нет. Модификатор final в Swift применяется не только к классам, но и к методам, свойствам, индексам (subscripts) и даже к структурам и перечислениям (хотя для value-типов это имеет меньше смысла, так как они не поддерживают наследование). Его цель — запретить переопределение (override) или наследование.
1. Final класс: Запрещает создание подклассов.
final class Vehicle {}
// class Car: Vehicle {} // ❌ Ошибка компиляции: Inheritance from a final class
2. Final метод или свойство: Запрещает переопределение в подклассах.
class Animal {
final func speak() { print("...") }
final var name: String = "Animal"
}
class Dog: Animal {
// override func speak() {} // ❌ Ошибка: Cannot override final method
// override var name: String { "Dog" } // ❌ Ошибка
}
3. Final структура или перечисление: Хотя они не наследуются, final предотвращает их использование как протокол-ориентированный супертип в некоторых контекстах (например, let value: some Vehicle). На практике используется редко.
Преимущества использования final:
- Безопасность: Явно указывает на дизайн, не предназначенный для наследования.
- Производительность: Компилятор может делать агрессивные оптимизации (например, devirtualization), так как знает, что метод или класс не будут переопределены.
- Скорость компиляции: Уменьшает время проверки типов.