Junior
Каква е разликата между прост клас и open клас в езика за програмиране Swift?
sobes.tech AI
Отговор от AI
Обикновен клас (без модификатор за достъп) по подразбиране има вътрешно (internal) ниво на достъп. Той може да бъде наследен само в рамките на същия модул (целен).
Класът open има най-високото ниво на достъп и неговите членове (методи, свойства, субскрипти) могат да бъдат преписвани както в рамките на същия модул, така и в други модули (фреймуъркове, библиотеки).
| Модификатор | Наследяване в рамките на модула | Наследяване извън модула | Преписване на членове в рамките на модула | Преписване на членове извън модула |
|---|---|---|---|---|
internal (по подразбиране) |
Да | Не | Да | Не |
open |
Да | Да | Да | Да |
// Пример за прост клас (internal по подразбиране) ВЪТРЕШНО в модул A
class MyInternalClass {
func internalMethod() {}
}
// Пример за open клас ВЪТРЕШНО в модул A
open class MyOpenClass {
open func openMethod() {}
}
// Използване ВЪТРЕШНО в модул A
class SubInternalClassInModuleA: MyInternalClass { // OK
override func internalMethod() {} // OK
}
class SubOpenClassInModuleA: MyOpenClass { // OK
override func openMethod() {} // OK
}
// Използване извън модул A (например, в модул B)
// грешка: не може да наследи от не-open клас 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }
class SubOpenClassInModuleB: MyOpenClass { // OK
override func openMethod() {} // OK
}