Sobes.tech
Junior

Aký je rozdiel medzi jednoduchou triedou a triedou open v jazyku Swift?

sobes.tech AI

Odpoveď od AI

Jednoduchá trieda (bez modifikátora prístupu) má predvolenú vnútornú (internal) úroveň prístupu. Môže byť zdedená iba v rámci toho istého modulu (cieľa).

Trieda open má najvyššiu úroveň prístupu a jej členovia (metódy, vlastnosti, subskripty) môžu byť prepísané tak v rámci toho istého modulu, ako aj v iných moduloch (frameworky, knižnice).

Modifikátor Dedičnosť v rámci modulu Dedičnosť mimo modulu Prepísanie členov v rámci modulu Prepísanie členov mimo modulu
internal (predvolené) Áno Nie Áno Nie
open Áno Áno Áno Áno
// Príklad jednoduchej triedy (internal predvolené) V RÁMCI modulu A
class MyInternalClass {
    func internalMethod() {}
}

// Príklad open triedy V RÁMCI modulu A
open class MyOpenClass {
    open func openMethod() {}
}
// Použitie V RÁMCI modulu A
class SubInternalClassInModuleA: MyInternalClass { // OK
    override func internalMethod() {}  // OK
}

class SubOpenClassInModuleA: MyOpenClass { // OK
    override func openMethod() {} // OK
}
// Použitie MIMO modulu A (napríklad v module B)
// chyba: nemožno dediť od ne-open triedy 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }

class SubOpenClassInModuleB: MyOpenClass { // OK
    override func openMethod() {} // OK
}