Sobes.tech
Junior

Koja je razlika između obične klase i open klase u programskom jeziku Swift?

sobes.tech АИ

Одговор од АИ

Jednostavna klasa (bez modifikatora pristupa) ima podrazumevani unutrašnji (internal) nivo pristupa. Može se naslediti samo unutar istog modula (cilja).

open klasa ima najviši nivo pristupa i njeni članovi (metode, svojstva, subskripti) mogu biti prepisani kako unutar istog modula, tako i u drugim modulima (framework-ovima, bibliotekama).

Modifikator Nasleđivanje unutar modula Nasleđivanje van modula Prepisivanje članova unutar modula Prepisivanje članova van modula
internal (podrazumevano) Da Ne Da Ne
open Da Da Da Da
// Primer jednostavne klase (internal po podrazumevanom) UNUTAR modula A
class MyInternalClass {
    func internalMethod() {}
}

// Primer open klase UNUTAR modula A
open class MyOpenClass {
    open func openMethod() {}
}
// Upotreba UNUTAR modula A
class SubInternalClassInModuleA: MyInternalClass { // OK
    override func internalMethod() {}  // OK
}

class SubOpenClassInModuleA: MyOpenClass { // OK
    override func openMethod() {} // OK
}
// Upotreba IZVAN modula A (npr. u modulu B)
// greška: ne može se naslediti ne-open klasa 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }

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