現在のアクセスコンテキストでアクセスできるあらゆるクラスを、サブクラスにすることができます。サブクラスをスーパークラスより高いアクセスレベルにすることはできません。例えば、internal のスーパークラスに、public のサブクラスを記述することはできません。

加えて、あるアクセスコンテキストにおいて可視である、あらゆるクラスメンバ(メソッド、プロパティ、イニシャライザ、サブスクリプト)をオーバーライドすることができます。

オーバーライドでは、継承されたクラスのメンバを、スーパークラスのバージョンよりアクセスしやすくできます。次の例では、クラス A は public クラスで、private メソッドの someMethod() があります。クラス B は A のサブクラスで、アクセスレベルは internal に制限しています。にもかかわらず、クラス B は someMethod() をオリジナルの実装より高いアクセスレベル internal でオーバーライドしています。

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 が同じソースファイルに定義されているため、someMethod() の実装で super.someMethod() を呼び出すことは有効です。


Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.