Sobes.tech
Junior

Kuo skiriasi paprasta klasė nuo open klasės Swift programavimo kalboje?

sobes.tech AI

Atsakymas iš AI

Paprastas klasė (be prieigos modifikatoriaus) turi numatytąją (internal) prieigos lygį. Ją galima paveldėti tik to paties modulio (tikslo) ribose.

open klasė turi aukščiausią prieigos lygį, ir jos nariai (metodai, savybės, subskryptai) gali būti perrašyti tiek to paties modulio, tiek kitų modulių (framework'ų, bibliotekų) viduje.

Modifikatorius Paveldėjimas modulyje Paveldėjimas už modulio ribų Narių perrašymas modulyje Narių perrašymas už modulio ribų
internal (numatytas) Taip Ne Taip Ne
open Taip Taip Taip Taip
// Paprasto klasės pavyzdys (internal numatytas) MODULYJE A
class MyInternalClass {
    func internalMethod() {}
}

// `open` klasės pavyzdys MODULYJE A
open class MyOpenClass {
    open func openMethod() {}
}
// Naudojimas MODULYJE A
class SubInternalClassInModuleA: MyInternalClass { // GERAI
    override func internalMethod() {}  // GERAI
}

class SubOpenClassInModuleA: MyOpenClass { // GERAI
    override func openMethod() {} // GERAI
}
// Naudojimas už modulio ribų (pvz., B modulyje)
// klaida: negalima paveldėti iš non-open klasės 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }

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