サブクラス化は、既存のクラスを新しいクラスのベースにすることです。サブクラスは、既存のクラスから特徴を継承し、改良することができます。また、サブクラスに新しい特徴を追加することも可能です。

サブクラスにスーパークラスがあることを示すために、サブクラス名の後にスーパークラス名を記述し、コロンで区切ります。

class SomeSubclass: SomeSuperclass {
    // サブクラスの定義
}

次の例では、Vehicle をスーパークラスとするサブクラス Bicycle を定義しています。

class Bicycle: Vehicle {
    var hasBasket = false
}

新しい Bicycle クラスは、currentSpeed や description プロパティと makeNoise() メソッドなどの、Vehicle のすべての特徴を自動的に獲得します。

継承する特徴に加えて、Bicycle クラスは新しいストアドプロパティ hasBasket をデフォルト値 false(プロパティを Bool 型と推論)で定義しています。

デフォルトでは、新しく生成する Bicycle インスタンスにはバスケットがありません。特定の Bicycle インスタンスを生成後、そのインスタンスの hasBasket プロパティを true に設定することができます。

let bicycle = Bicycle()
bicycle.hasBasket = true

Bicycle インスタンスが継承した currentSpeed プロパティを変更することや、そのインスタンスが継承した description プロパティを問い合わせることも可能です。

bicycle.currentSpeed = 15.0
print("Bicycle: \(bicycle.description)")
// Bicycle: traveling at 15.0 miles per hour

サブクラスをさらにサブクラス化することができます。次の例では、2 人乗りの自転車「タンデム」として Bicycle のサブクラスを生成しています。

class Tandem: Bicycle {
    var currentNumberOfPassengers = 0
}

Tandem は、Vehicle からすべてのプロパティとメソッドを継承する Bicycle から、すべてのプロパティとメソッドを継承します。また、サブクラス Tandem は新しいストアドプロパティ currentNumberOfPassengers をデフォルト値 0 で追加しています。

Tandem インスタンスを生成する場合、新しいプロパティおよび継承したプロパティを扱うことができ、Vehicle から継承する読み取り専用の description プロパティを問い合わせることができます。

let tandem = Tandem()
tandem.hasBasket = true
tandem.currentNumberOfPassengers = 2
tandem.currentSpeed = 22.0
print("Tandem: \(tandem.description)")
// Tandem: traveling at 22.0 miles per hour

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.