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
}