Back to questions
Junior
145
questionbank
В чем отличие простого класса от open класса в языке программирования Swift?
Sobes Copilot
Get answers in real time
Answer from AI
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
}