Видеокурсы по изучению языка программирования Swift. Подробнее

Уровень доступа класса и подкласса

Если вы нашли опечатку в тексте, выделите ее и нажмите CTRL + ENTER.

Вы можете создать подкласс любого класса, который может быть доступен в текущем контексте. Подкласс не может иметь более высокого уровня доступа, чем его суперкласс. Например, вы не можете написать подклассу public, если его суперкласс имеет internal доступ.

В дополнение вы можете переопределить любой член класса (метод, свойство, инициализатор или сабскрипт), который будет виден в определенном контексте доступа.

Переопределение может сделать член унаследованного класса более доступным, чем его версия суперкласса. В примере ниже класс A имеет доступ public и имеет метод someMethod с уровнем доступа private. Класс B является подклассом класса A, который имеет урезанный уровень доступа до internal. Тем не менее, класс B предоставляет переопределение метода someMethod с уровнем доступа internal, который выше, чем первоначальное определение метода someMethod:

public class A {
    private func someMethod() {}
}
 
internal class B: A {
    override internal func someMethod() {}
}

Это так же справедливо и для членов подкласса, которые вызывают член суперкласса, который имеет более низкий уровень доступа, чем они, до тех пор пока вызов члена суперкласса попадает под допустимый уровень доступа контекста (то есть, внутри одного исходного файла суперкласс может вызвать член с уровнем доступа private или в пределах одного модуля суперкласс может вызвать член с уровнем доступа internal):

public class A {
    private func someMethod() {}
}
 
internal class B: A {
    override internal func someMethod() {
        super.someMethod()
    }
}

Из-за того, что суперкласс A и подкласс B определены в одном исходном файле, то будет корректно для реализации B записать вызов метода someMethod как super.someMethod().

Swift: 
3.0