Назад к вопросам
Junior
114
questionbank
В чем отличие простого класса от open класса в языке программирования Swift?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Простой класс (без модификатора доступа) имеет внутренний (internal) уровень доступа по умолчанию. Его можно наследовать только в пределах того же модуля (таргета).
open класс имеет самый высокий уровень доступа и его можно наследовать и переопределять его члены (методы, свойства, сабскрипты) как в пределах того же модуля, так и в других модулях (фреймворках, библиотеках).
| Модификатор | Наследование внутри модуля | Наследование вне модуля | Переопределение членов внутри модуля | Переопределение членов вне модуля |
|---|---|---|---|---|
internal (по умолчанию) |
Да | Нет | Да | Нет |
open |
Да | Да | Да | Да |
// Пример простого класса (internal по умолчанию) ВНУТРИ модуля А
class MyInternalClass {
func internalMethod() {}
}
// Пример open класса ВНУТРИ модуля А
open class MyOpenClass {
open func openMethod() {}
}
// Использование ВНУТРИ модуля А
class SubInternalClassInModuleA: MyInternalClass { // OK
override func internalMethod() {} // OK
}
class SubOpenClassInModuleA: MyOpenClass { // OK
override func openMethod() {} // OK
}
// Использование ВНЕ модуля А (например, в модуле Б)
// error: cannot inherit from non-open class 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }
class SubOpenClassInModuleB: MyOpenClass { // OK
override func openMethod() {} // OK
}