Sobes.tech
Junior

Jaký je rozdíl mezi jednoduchou třídou a třídou open v jazyce Swift?

sobes.tech AI

Odpověď od AI

Jednoduchá třída (bez modifikátoru přístupu) má výchozí vnitřní (internal) úroveň přístupu. Může být děděna pouze v rámci stejného modulu (cíle).

Třída open má nejvyšší úroveň přístupu a její členové (metody, vlastnosti, subskripty) mohou být přepsány jak v rámci stejného modulu, tak v jiných modulech (frameworky, knihovny).

Modifikátor Dědění uvnitř modulu Dědění mimo modul Přepis členů uvnitř modulu Přepis členů mimo modul
internal (výchozí) Ano Ne Ano Ne
open Ano Ano Ano Ano
// Příklad jednoduché třídy (výchozí internal) uvnitř modulu A
class MyInternalClass {
    func internalMethod() {}
}

// Příklad open třídy uvnitř modulu A
open class MyOpenClass {
    open func openMethod() {}
}
// Použití uvnitř modulu A
class SubInternalClassInModuleA: MyInternalClass { // OK
    override func internalMethod() {}  // OK
}

class SubOpenClassInModuleA: MyOpenClass { // OK
    override func openMethod() {} // OK
}
// Použití mimo modul A (například v modulu B)
// chyba: nelze dědit z ne-open třídy 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }

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