継承とポリモーフィズムの違い

著者: Laura McKinney
作成日: 1 4月 2021
更新日: 17 5月 2024
Anonim
ポリモフィズムとは何か、使い方やメリットをコードで解説【Java入門講座】4-7 抽象クラスとポリモーフィズム
ビデオ: ポリモフィズムとは何か、使い方やメリットをコードで解説【Java入門講座】4-7 抽象クラスとポリモーフィズム

コンテンツ


継承により、コードの再利用性とポリモーフィズムは、異なる形式の1つの関数の発生を可能にします。継承とポリモーフィズムの基本的な違いは、継承により、既存のコードをプログラムで再利用できることと、ポリモーフィズムによって、どの形式の関数を呼び出すかを動的に決定するメカニズムが提供されることです。

  1. 比較表
  2. 定義
  3. 主な違い
  4. 結論

比較表

比較の根拠継承多型
ベーシック継承は、既存のクラスのプロパティを使用して新しいクラスを作成しています。ポリモーフィズムは、基本的に複数のフォームの一般的なインターフェイスです。
実装継承は基本的にクラスに実装されます。多態性は、基本的に関数/メソッドに実装されます。
つかいますOOPでの再利用性の概念をサポートし、コードの長さを削減します。オブジェクトは、コンパイル時(オーバーロード)および実行時(オーバーライド)に呼び出される関数の形式を決定できます。
フォーム継承は、単一の継承、複数の継承、マルチレベルの継承、階層的な継承、およびハイブリッドの継承です。多型は、コンパイル時の多型(オーバーロード)または実行時の多型(オーバーライド)の場合があります。
テーブルは家具であるため、クラステーブルはクラス家具の機能を継承できます。クラスstudy_tableには関数set_color()を含めることができ、クラスDining_tableには関数set_color()を含めることができるため、呼び出すset_color()関数の形式は、コンパイル時と実行時の両方で決定できます。


継承の定義:

継承はOOPの重要な機能の1つであり、「再利用性」を強力にサポートします。再利用性は、既存のクラスのプロパティを再利用することにより、新しいクラスを作成することとして説明できます。継承には、派生クラスによって継承される基本クラスがあります。クラスが他のクラスを継承する場合、基本クラスのメンバーは派生クラスのメンバーになります。

クラスを継承する一般的な形式は次のとおりです。

classderived-class-name:アクセス指定子base-class-name {//クラスの本体};

ここで、アクセス指定子は、派生クラスから基本クラスのメンバーへのアクセスモード(プライベート、パブリック、保護)を提供します。アクセス指定子が存在しない場合、デフォルトでは「プライベート」と見なされます。 C ++では、派生クラスが「struct」である場合、アクセス指定子はデフォルトで「public」です。

C ++では、継承は5つの形式で実現できます。彼らは次のように分類することができます-

  • 単一継承(1つのスーパークラスのみ)
  • 多重継承(複数のスーパークラス)
  • 階層継承(1つのスーパークラス、多くのサブクラス)
  • 多重継承(派生クラスから派生)

Javaでは、クラスはキーワード「extends」を使用して他のクラスを継承します。 Javaでは、基本クラスはスーパークラスと呼ばれ、派生クラスはサブクラスと呼ばれます。サブクラスは、「プライベート」として宣言されている基本クラスのメンバーにアクセスできません。 Javaでクラスを継承する一般的な形式は次のとおりです。

classderived-class-nameはbase-class-name {//クラスの本体}を拡張します;

Javaは、複数レベルの階層をサポートするのに対して、多重継承の継承をサポートしません。 Javaでは、スーパークラスが実装の詳細を隠したい場合があり、そのデータの一部を「プライベート」にします。 Javaと同様に、サブクラスはスーパークラスのプライベートメンバーにアクセスできません。サブクラスがそれらのメンバーにアクセスまたは初期化する場合、Javaはソリューションを提供します。サブクラスは、キーワード「super」を使用して、その直接のスーパークラスのメンバーを参照できます。すぐにスーパークラスのメンバーにしかアクセスできないことに注意してください。


「スーパー」には2つの一般的な形式があります。 1つ目は、スーパークラスのコンストラクターを呼び出すために使用します。 2番目は、サブクラスのメンバーによって非表示にされたスーパークラスのメンバーにアクセスすることです。

//コンストラクタを呼び出す最初の形式。 class supper_class {supper_class(argument_list){..} //スーパークラスのコンストラクタ}; class sub_class extends supper_class {sub_class(argument_list){..} // sub_classのコンストラクタsuper(argument_list); // sub_classはスーパークラスのコンストラクタを呼び出します}};

//スーパークラスsupper_classの2番目{int i; }クラスsub_classはsupper_classを拡張します{int i; sub_class(int a、int b){super.i = a; //スーパークラスi = bのi; //サブクラスのi}};

多型の定義

多型という用語は、単に「1つの機能、複数のフォーム」を意味します。多態性は、コンパイル時と実行時の両方で実現されます。コンパイル時のポリモーフィズムは「オーバーロード」によって実現されますが、実行時のポリモーフィズムは「オーバーライド」によって実現されます。

ポリモーフィズムにより、オブジェクトは、コンパイル時と実行時の両方で「どの形式の関数を呼び出すか」を決定できます。
オーバーロードの最初の概念について説明しましょう。オーバーロードでは、異なるデータ型とパラメーター数でクラスに関数を複数回定義しますが、オーバーロードする関数は同じ戻り値型でなければなりません。ほとんどの場合、オーバーロードされた関数はクラスのコンストラクターです。

クラスオーバーロード{int a、b; public:int overload(int x){//最初のoverload()コンストラクターa = x;を返します; } int overload(int x、int y){// 2番目のoverload()コンストラクターa = x; b = y; a * bを返します。 }}; int main(){オーバーロードO1; O1.overload(20); //最初のoverload()コンストラクター呼び出しO1.overload(20,40); // 2番目のoverload()コンストラクター呼び出し}

それでは、ポリモーフィズムの2番目の形式、つまりオーバーライドについて説明しましょう。オーバーライドの概念は、継承の概念も実装するクラスの機能にのみ実装できます。 C ++では、オーバーライドされる関数の前に基本クラスのキーワード「virtual」があり、キーワード「virtual」を除く同じプロトタイプを使用して派生クラスで再定義されています。

class base {public:virtual void funct(){//基本クラスの仮想関数cout << "これは基本クラスfunct()"; }}; classderived1:public base {public:void funct(){//派生クラス1で再定義された基本クラスの仮想関数cout << "これは派生クラス1 funct()"; }}; int main(){base * p、b; derived1 d1; * p =&b; p-> funct(); //基本クラスfunct()を呼び出します。 * p =&d1; 0を返します。 }

  1. 継承とは、既存のクラスから機能を引き出すクラスを作成することです。一方、ポリモーフィズムは、複数の形式で定義できるインターフェイスです。
  2. 継承はクラスに実装されますが、ポリモーフィズムはメソッド/関数に実装されます。
  3. 継承は派生クラスが基本クラスで定義された要素とメソッドを使用できるようにするため、派生クラスはそれらの要素やメソッドを再度定義する必要がないため、コードの再利用性が向上し、コードの長さが短縮されます。一方、ポリモーフィズムにより、オブジェクトは、コンパイル時と実行時の両方で呼び出すメソッドの形式を決定できます。
  4. 継承は、単一継承、多重継承、マルチレベル継承、階層継承、ハイブリッド継承に分類できます。一方、ポリモーフィズムは、オーバーロードとオーバーライドとして分類されます。

結論:

動的なポリモーフィズムは、継承の概念も実装するクラスに適用されるため、継承とポリモーフィズムは相互に関連する概念です。