Sobes.tech
Junior

¿Cuál es la diferencia entre open y public?

sobes.tech AI

Respuesta de la IA

open permite heredar y sobrescribir miembros en cualquier módulo, mientras que public permite usar miembros en cualquier módulo, pero la herencia y sobrescritura están permitidas solo dentro del mismo módulo donde se declara el miembro.

Característica open public
Acceso Cualquier módulo Cualquier módulo
Herencia Cualquier módulo Solo en su propio módulo
Sobrescritura Cualquier módulo Solo en su propio módulo

Ejemplo:

// Módulo A
open class OpenClass {
    open func openMethod() { }
    public func publicMethod() { }
}

public class PublicClass {
    public func publicMethod() { }
}

// Módulo B
import ModuleA

class SubclassOfOpen: OpenClass {
    override func openMethod() {
        // Posible en Módulo B
    }

    // Error: publicMethod está permitido usar, pero no sobrescribir fuera del Módulo A
    // override func publicMethod() { }
}

// Error: PublicClass no permite heredar fuera del Módulo A
// class SubclassOfPublic: PublicClass { }