Sobes.tech
Junior

¿Cuál es la diferencia entre una clase simple y una clase open en el lenguaje de programación Swift?

sobes.tech AI

Respuesta de la IA

Una clase simple (sin modificador de acceso) tiene un nivel de acceso interno (internal) por defecto. Solo puede heredarse dentro del mismo módulo (objetivo).

La clase open tiene el nivel de acceso más alto y puede heredarse y sobrescribir sus miembros (métodos, propiedades, subíndices) tanto dentro del mismo módulo como en otros módulos (frameworks, bibliotecas).

Modificador Herencia dentro del módulo Herencia fuera del módulo Sobrescribir miembros dentro del módulo Sobrescribir miembros fuera del módulo
internal (por defecto) No No
open
// Ejemplo de clase simple (internal por defecto) DENTRO del módulo A
class MyInternalClass {
    func internalMethod() {}
}

// Ejemplo de clase open DENTRO del módulo A
open class MyOpenClass {
    open func openMethod() {}
}
// Uso DENTRO del módulo A
class SubInternalClassInModuleA: MyInternalClass { // OK
    override func internalMethod() {}  // OK
}

class SubOpenClassInModuleA: MyOpenClass { // OK
    override func openMethod() {} // OK
}
// Uso FUERA del módulo A (por ejemplo, en el módulo B)
// error: no se puede heredar de una clase no-open 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }

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