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

Является ли класс open финальным или нефинальным?

Sobes Copilot

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

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

sobes.tech AI

Класс, помеченный как open, является нефинальным. Ключевое слово open в Swift позволяет другим модулям (а не только внутри того же модуля, что и public) наследовать от этого класса и переопределять его методы и свойства. Класс без open или final по умолчанию является internal и может быть унаследован только внутри того же модуля. Класс, помеченный как final, не может быть унаследован вообще.

Сравнительная таблица:

Ключевое слово Наследование (в том же модуле) Наследование (в других модулях) Переопределение (в том же модуле) Переопределение (в других модулях) По умолчанию (без open/public/internal/fileprivate/private и final)
open Да Да Да Да Нет (по умолчанию internal)
public Да Нет Да Нет Нет (по умолчанию internal)
internal Да Нет Да Нет Да
fileprivate Нет Нет Да Нет Нет (по умолчанию internal)
private Нет Нет Да Нет Нет (по умолчанию internal)
final Нет Нет Нет Нет Нет (может быть вместе с open - что нелогично, или с другими уровнями доступа)

Пример:

// Класс, от которого можно наследовать и переопределять в других модулях
open class OpenClass {
    open func openMethod() {
        // Реализация
    }
}

// Класс, от которого можно наследовать и переопределять только в том же модуле
public class PublicClass {
    public func publicMethod() {
        // Реализация
    }
}

// Класс, который нельзя наследовать
final class FinalClass {
    func finalMethod() {
        // Реализация
    }
}