Sobes.tech
Junior

Qual é a diferença entre open e public?

sobes.tech IA

Resposta da IA

open permite herdar e sobrescrever membros em qualquer módulo, enquanto que public permite usar membros em qualquer módulo, mas herança e sobrescrita são permitidas apenas dentro do mesmo módulo onde o membro é declarado.

Característica open public
Acesso Qualquer módulo Qualquer módulo
Herança Qualquer módulo Apenas no seu próprio módulo
Sobrescrita Qualquer módulo Apenas no seu próprio módulo

Exemplo:

// 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() {
        // Possível em Módulo B
    }

    // Erro: publicMethod permitido usar, mas não sobrescrever fora do Módulo A
    // override func publicMethod() { }
}

// Erro: PublicClass não permite herança fora do Módulo A
// class SubclassOfPublic: PublicClass { }