Back to questions
Junior
140
questionbank
Является ли класс open финальным или нефинальным?
Sobes Copilot
Get answers in real time
Answer from AI
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() {
// Реализация
}
}