Sobes.tech
Junior

A classe open é pública ou privada?

sobes.tech IA

Resposta da IA

A classe open é pública. A diferença para simplesmente public é que as classes e membros de classes declarados como open podem ser herdados e sobrescritos fora do módulo onde estão definidos. As classes public estão disponíveis para uso fora do módulo, mas não podem ser herdadas ou sobrescritas a menos que sejam marcadas como open.

Níveis de acesso em Swift:

  • open: O nível de acesso mais alto. Disponível de qualquer módulo e pode ser herdado e sobrescrito.
  • public: Disponível de qualquer módulo, mas não pode ser herdado ou sobrescrito fora do módulo.
  • internal: Nível de acesso padrão. Disponível apenas dentro de um módulo.
  • fileprivate: Disponível apenas dentro do arquivo onde é definido.
  • private: O nível de acesso mais baixo. Disponível apenas dentro da declaração onde é definido.

Exemplo:

// Declaração de classe open em ModulesA.swift
open class OpenClass {
    open func openMethod() {
        print("Este é um método open.")
    }
}

// Uso em ModulesB.swift (outro módulo)
import ModulesA

class MyClass: OpenClass { // Herança permitida
    override func openMethod() { // Sobrescrita permitida
        super.openMethod()
        print("Este é um método open sobrescrito.")
    }
}
// Declaração de classe public em ModulesA.swift
public class PublicClass {
    public func publicMethod() {
        print("Este é um método público.")
    }
}

// Uso em ModulesB.swift (outro módulo)
import ModulesA

let instance = PublicClass()
instance.publicMethod() // Uso permitido

// class MyOtherClass: PublicClass { // ERRO: Classe pública não pode ser subclassificada fora do seu módulo
//     override func publicMethod() { // ERRO: Método público não pode ser sobrescrito fora do seu módulo
//         super.publicMethod()
//     }
// }