Junior
Qual è la differenza tra una classe semplice e una classe open nel linguaggio di programmazione Swift?
sobes.tech AI
Risposta dell'AI
Una classe semplice (senza modificatore di accesso) ha di default un livello di accesso interno (internal). Può essere ereditata solo all'interno dello stesso modulo (target).
La classe open ha il livello di accesso più alto e i suoi membri (metodi, proprietà, subscript) possono essere sovrascritti sia all'interno dello stesso modulo che in altri moduli (framework, librerie).
| Modificatore | Ereditarietà all'interno del modulo | Ereditarietà fuori dal modulo | Sovrascrittura dei membri all'interno del modulo | Sovrascrittura dei membri fuori dal modulo |
|---|---|---|---|---|
internal (predefinito) |
Sì | No | Sì | No |
open |
Sì | Sì | Sì | Sì |
// Esempio di classe semplice (internal di default) DENTRO il modulo A
class MyInternalClass {
func internalMethod() {}
}
// Esempio di classe open DENTRO il modulo A
open class MyOpenClass {
open func openMethod() {}
}
// Uso DENTRO il modulo A
class SubInternalClassInModuleA: MyInternalClass { // OK
override func internalMethod() {} // OK
}
class SubOpenClassInModuleA: MyOpenClass { // OK
override func openMethod() {} // OK
}
// Uso FUORI dal modulo A (ad esempio, nel modulo B)
// errore: impossibile ereditare da una classe non-open 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }
class SubOpenClassInModuleB: MyOpenClass { // OK
override func openMethod() {} // OK
}