Sobes.tech
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
}