Sobes.tech
Junior

Qual é a diferença entre uma classe simples e uma classe open na linguagem de programação Swift?

sobes.tech IA

Resposta da IA

Uma classe simples (sem modificador de acesso) tem um nível de acesso interno (internal) por padrão. Pode ser herdada apenas dentro do mesmo módulo (destino).

A classe open tem o nível de acesso mais alto e pode ser herdada e seus membros (métodos, propriedades, subscript) podem ser sobrescritos tanto dentro do mesmo módulo quanto em outros módulos (frameworks, bibliotecas).

Modificador Herança dentro do módulo Herança fora do módulo Sobrescrever membros dentro do módulo Sobrescrever membros fora do módulo
internal (por padrão) Sim Não Sim Não
open Sim Sim Sim Sim
// Exemplo de classe simples (internal por padrão) DENTRO do módulo A
class MyInternalClass {
    func internalMethod() {}
}

// Exemplo de classe open DENTRO do módulo A
open class MyOpenClass {
    open func openMethod() {}
}
// Uso DENTRO do módulo A
class SubInternalClassInModuleA: MyInternalClass { // OK
    override func internalMethod() {}  // OK
}

class SubOpenClassInModuleA: MyOpenClass { // OK
    override func openMethod() {} // OK
}
// Uso FORA do módulo A (por exemplo, no módulo B)
// erro: não é possível herdar de uma classe não-open 'MyInternalClass'
// class SubInternalClassInModuleB: MyInternalClass { }

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