Sobes.tech
Junior

Quelle est la différence entre une classe simple et une classe open dans le langage de programmation Swift?

sobes.tech IA

Réponse de l'IA

Une classe simple (sans modificateur d'accès) a un niveau d'accès interne (internal) par défaut. Elle ne peut être héritée que dans le même module (cible).

La classe open a le niveau d'accès le plus élevé et peut être héritée et ses membres (méthodes, propriétés, sous-scripts) peuvent être redéfinis aussi bien dans le même module que dans d'autres modules (frameworks, bibliothèques).

Modificateur Héritage dans le module Héritage hors du module Redéfinition des membres dans le module Redéfinition des membres hors du module
internal (par défaut) Oui Non Oui Non
open Oui Oui Oui Oui
// Exemple de classe simple (par défaut internal) DANS le module A
class MyInternalClass {
    func internalMethod() {}
}

// Exemple de classe open DANS le module A
open class MyOpenClass {
    open func openMethod() {}
}
// Utilisation DANS le module A
class SubInternalClassInModuleA: MyInternalClass { // OK
    override func internalMethod() {}  // OK
}

class SubOpenClassInModuleA: MyOpenClass { // OK
    override func openMethod() {} // OK
}
// Utilisation HORS du module A (par exemple, dans le module B)
// erreur : impossible d'hériter d'une classe non-open 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }

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