Назад к вопросам
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() {
// Реализация
}
}