Swift-inheritance
スイフト-継承
より多くの形式を取る能力は、継承として定義されます。 通常、クラスは別のクラスからメソッド、プロパティ、機能を継承できます。 クラスはさらにサブクラスとスーパークラスに分類できます。
- サブクラス-クラスが別のクラスからプロパティ、メソッド、および関数を継承する場合、サブクラスとして呼び出されます
- スーパークラス-他のクラスをそれ自体から継承するためのプロパティ、メソッド、および関数を含むクラスは、スーパークラスと呼ばれます
Swift 4クラスには、メソッド、プロパティ、関数、およびオーバーライドメソッドを呼び出してアクセスするスーパークラスが含まれています。 また、プロパティオブザーバーは、プロパティを追加し、保存または計算されたプロパティメソッドを変更するためにも使用されます。
基本クラス
別のクラスからメソッド、プロパティ、または関数を継承しないクラスは、「基本クラス」と呼ばれます。
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
クラス名StudDetailsのクラスは、ここでは学生の名前を含むために使用される基本クラスとして定義され、3つの科目はmark1、mark2、mark3としてマークされます。 「let」キーワードは、基本クラスの値を初期化するために使用され、基本クラス値は「print」機能の助けを借りてプレイグラウンドに表示されます。
サブクラス
既存のクラスに基づいて新しいクラスを作成する行為は、「サブクラス」として定義されます。 サブクラスは、基本クラスのプロパティ、メソッド、および機能を継承します。 サブクラスを定義するには、基本クラス名の前に「:」を使用します
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
クラス 'StudDetails’は、学生マークが宣言されているスーパークラスとして定義され、サブクラス 'display’は、スーパークラスからマークを継承するために使用されます。 サブクラスは生徒のマークを定義し、print()メソッドを呼び出して生徒のマークを表示します。
オーバーライド
スーパークラスインスタンス、型メソッド、インスタンス、型プロパティ、および添え字サブクラスにアクセスすると、オーバーライドの概念が提供されます。 「override」キーワードは、スーパークラスで宣言されたメソッドをオーバーライドするために使用されます。
スーパークラスのメソッド、プロパティ、サブスクリプトへのアクセス
「スーパー」キーワードは、スーパークラスで宣言されたメソッド、プロパティ、およびサブスクリプトにアクセスするためのプレフィックスとして使用されます
Overriding | Access to methods,properties and subscripts |
Methods | super.somemethod() |
Properties | super.someProperty() |
Subscripts | super[someIndex] |
メソッドのオーバーライド
継承されたインスタンスおよびタイプのメソッドは、サブクラスで定義されたメソッドの 'override’キーワードによってオーバーライドできます。 ここでは、サブクラスでprint()がオーバーライドされ、スーパークラスのprint()で言及されているtypeプロパティにアクセスします。 また、cricket()スーパークラスの新しいインスタンスが「cricinstance」として作成されます。
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
プロパティのオーバーライド
継承されたインスタンスまたはクラスプロパティをオーバーライドして、そのプロパティに独自のカスタムgetterおよびsetterを提供したり、プロパティオブザーバを追加して、基になるプロパティ値が変更されたときにオーバーライドプロパティが監視できるようにすることができます。
プロパティゲッターとセッターのオーバーライド
Swift 4では、ユーザーがカスタムgetterおよびsetterを提供して、継承されたプロパティが保存されたプロパティまたは計算されたプロパティであるかどうかをオーバーライドできます。 サブクラスは、継承されたプロパティの名前とタイプを知りません。 したがって、ユーザーがサブクラスで、スーパークラスで指定されたオーバーライドプロパティの名前とタイプを指定する必要があります。
これは2つの方法で行うことができます-
- プロパティをオーバーライドするためにセッターが定義されている場合、ユーザーはゲッターも定義する必要があります。
- 継承されたプロパティゲッターを変更したくない場合は、継承された値を構文 'super.someProperty’でスーパークラスに渡すだけです。
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
プロパティオブザーバーのオーバーライド
継承されたプロパティに新しいプロパティを追加する必要がある場合、「プロパティオーバーライド」の概念がSwift 4で導入されます。 これは、継承されたプロパティ値が変更されたときにユーザーに通知します。 ただし、継承された定数保存プロパティおよび継承された読み取り専用の計算プロパティにはオーバーライドは適用されません。
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
オーバーライドを防止する最終プロパティ
ユーザーが他の人にスーパークラスのメソッド、プロパティ、または添え字へのアクセスを望まない場合、Swift 4はオーバーライドを防ぐために「最終」プロパティを導入します。 「最終」プロパティが宣言されると、サブスクリプトはスーパークラスのメソッド、プロパティ、およびそのサブスクリプトをオーバーライドできなくなります。 「スーパークラス」に「最終」プロパティを設定する規定はありません。 「最終」プロパティが宣言されると、ユーザーはさらにサブクラスを作成するように制限されます。
プレイグラウンドを使用して上記のプログラムを実行すると、次の結果が得られます-
スーパークラスは「final」として宣言され、そのデータ型も「final」として宣言されているため、プログラムはサブクラスをさらに作成できず、エラーがスローされます。