オブジェクト指向プログラミングにおける継承は、オブジェクトを一般的なものから特定のものに階層的に編成する方法です。これは、クラスを別のクラスに拡張し、類似の実行を維持するために使用されるガジェットです。
ほとんどのクラスベースのオブジェクト指向言語では、子オブジェクトと呼ばれる継承によって作成されたオブジェクトは、親オブジェクトのすべてのプロパティと動作を取得します。
オブジェクト指向における継承の簡単な証明。出典:Pluke / CC0 Creative Commons CC0 1.0 Universal Public Domain
したがって、それは異なるクラス間の関係を表す品質です。継承により、クラスは別のクラスと同じ動作を持ち、その動作を拡張または適応して、特定のニーズに応じた特別なアクションを提供できます。
継承は、動作方法にいくつかの相違点と類似点があるオブジェクトを表すのに役立ちます。オブジェクトに共通するすべての機能を基本クラスに配置し、独自のカスタム機能を使用して1つ以上のサブクラスを定義できます。
継承の特徴
継承はオブジェクト指向プログラミングの重要な特徴の1つであり、既存のクラスから新しいクラスを定義するために使用されます。
つまり、既存の基本クラスから新しいクラスを派生させて、新しい機能を追加できます。最初から書く必要はありません。したがって、継承は既存のコードを簡単に再利用する方法を提供します。
必要なほぼすべてを実行するクラスがすでにある場合は、その動作の一部が部分的にオーバーライドされているサブクラスを作成するか、新しい機能を追加することができます。
派生クラスは、以下を除いて、基本クラスのすべてのメソッドを継承します。
-基本クラスのコンストラクタ、デストラクタ、およびコピーコンストラクタ。
-基本クラスからオーバーロードされた演算子。
-基本クラスのフレンドリーな機能。
階層
家系図と同様に、継承はクラスの階層を形成するのに役立ちます。基本クラスに対して決定された属性は、派生クラスに自動的に存在することに注意することが重要です。また、基本クラスのメソッドは、派生物でも機能します。
クラスは、継承元のクラスのサブクラスと呼ばれます。一方、このクラスはスーパークラスになります。最も一般的なクラスは、階層のベースにあるため、基本クラスと呼ぶことができます。
ポリモーフィズム
継承は、プログラマが静的型の制限の一部を回避できるため、静的型を使用する一部の言語で非常に人気があります。
別のオブジェクトから継承するオブジェクトは、そのオブジェクトのサブタイプと見なされます。たとえば、「instructor」や「student」などのオブジェクトは、それぞれ「person」から継承されます。
インストラクターと学生が同じ人物タイプの場合、パラメーターとして人物タイプを受け入れ、インストラクターオブジェクトと学生オブジェクトの両方を継承する関数を記述できます。
継承の種類
独自の継承
派生クラスが単一の基本クラスのプロパティと動作を継承する場合。つまり、1つのクラスが他の1つのクラスのみに拡張されます。
マルチレベルの継承
派生クラスから継承できるガジェットを参照し、この派生クラスを新しいクラスの基本クラスにします。つまり、派生クラスが別の派生クラスから作成されたときに発生します。
階層継承
この継承では、多くのサブクラスが単一のクラスから継承します。つまり、単一の基本クラスが複数の派生クラスによって継承される場合に発生します。
ハイブリッド継承
これは、前の3つの継承(単一、階層、およびマルチレベル)のいずれかを組み合わせた場合の結果の継承です。
多重継承
クラスが複数のスーパークラスから継承する場合の継承図に相当します。このタイプの継承の欠点は、派生クラスが2つの基本クラスに対する依存関係を処理する必要があることです。
一方、このタイプの継承により、プログラマは、複数のクラスのアスペクトとそれに対応する階層を組み合わせたクラスを構築できます。
基本クラスからの継承のタイプ
公的遺産
クラスがパブリック基本クラスから派生すると、基本クラスのパブリックメンバーは派生クラスのパブリックメンバーになり、基本クラスの保護メンバーは派生クラスの保護メンバーになります。
スーパークラスのプライベートメンバーには、派生クラスから直接アクセスすることはできませんが、基本クラスのパブリックメンバーおよび保護メンバーへの呼び出しを通じてアクセスできます。
保護された継承
保護されたスーパークラスを継承するクラスが作成されると、このスーパークラスのパブリックメンバーと保護されたメンバーの両方が、派生クラスの保護されたメンバーになります。
個人相続
サブクラスがプライベートスーパークラスから作成されると、このスーパークラスのパブリックおよび保護されたメンバーは、サブクラスのプライベートメンバーになります。
例
Pythonの例
継承の原理がどのように機能するかを示すために、Pythonプログラミング言語でロボットまたはロボットのより良いクラスを取り上げます。これを行うには、Robotスーパークラスから派生したRobotMédico(PhysicianRobot)というクラスを指定します。
RobotMédicoクラスのコードを見ると、このクラスで属性またはメソッドが定義されていないことがわかります。
RobotMedicoクラスはRobotのサブクラスであるため、この場合は__init__メソッドとsay_hiメソッドの両方を継承します。これらのメソッドを継承することは、RobotMédicoクラスで定義されているかのように使用できることを意味します。
RobotMedicoのインスタンスが作成されると、__ init__関数も名前属性を作成します。前のコードの結果からわかるように、say_hiメソッドはRobotMédicoのオブジェクト「y」に適用できます。
C ++での例
クラスは複数のクラスから継承できるため、複数のスーパークラスからデータと関数を継承できます。派生クラスを定義するには、クラス派生リストを使用して基本クラスを指定します。
C ++のクラス派生リストは、1つ以上の基本クラスに名前を付け、次の形式になります。以前に定義されたクラスの名前。access-specifierを使用しない場合、デフォルトでプライベートが使用されます。
スーパークラス「Shape」とその派生クラス「Rectangle」は、次のように考えることができます。
上記のコードをコンパイルして実行すると、「総面積:35」という出力が表示されます。
参考文献
- デイブ・ブラウンシュヴァイク(2020)。継承とポリモーフィズム。Rebusコミュニティ。取得元:press.rebus.community。
- Pythonコース(2020)。継承。python-course.euから取得。
- データメンター(2020)。R継承。取得元:datamentor.io。
- チュートリアルポイント(2020)。C ++継承。取得元:tutorialspoint.com。
- ネット情報(2020)。異なるタイプの継承。取得元:net-informations.com。