Назад к вопросам
Junior
78
questionbank

В чем разница между open и public?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

open позволяет наследоваться и переопределять членов в любом модуле, тогда как public позволяет использовать членов в любом модуле, но наследование и переопределение разрешены только в рамках того же модуля, где член объявлен.

Характеристика open public
Доступ Любой модуль Любой модуль
Наследование Любой модуль Только свой модуль
Переопределение Любой модуль Только свой модуль

Пример:

// Module A
open class OpenClass {
    open func openMethod() { }
    public func publicMethod() { }
}

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

// Module B
import ModuleA

class SubclassOfOpen: OpenClass {
    override func openMethod() {
        // Возможно в Module B
    }

    // Ошибка: publicMethod разрешено использовать, но не переопределять вне Module A
    // override func publicMethod() { }
}

// Ошибка: PublicClass не разрешает наследование вне Module A
// class SubclassOfPublic: PublicClass { }