サーチ…


前書き

多態性は、 OOP(オブジェクト指向プログラミング)の基本概念の1つです。多形性の主なアイデアは、オブジェクトがさまざまな形を取る能力を持っていることです。これを達成するために(多型性)、主に2つのアプローチがあります。

  1. メソッドのオーバーロード

    • 同じ名前のメソッドが2つ以上あり、入力パラメータが異なる場合に発生します。 戻り値の型は、同じ名前を持つすべてのメソッドで同じでなければなりません
  2. メソッドのオーバーライド

    • 子オブジェクトが同じメソッド定義(同じ名前の同じ名前)を使用しているが、実装が異なる場合に発生します。

これらの2つのアプローチを使用して、同じ方法/機能を使用して異なる動作をすることができます。以下の例でこれについて詳しく説明します。

メソッドのオーバーロード

メソッドオーバーロードは、クラス内で多態性を使用する方法です。同じクラスの中に、異なる入力パラメータを持つ2つ以上のメソッドを持つことができます。

入力パラメータの違いは、次のいずれかです。

  • パラメータ数
  • パラメータのタイプ(データタイプ)
  • パラメータの順序

それらを別々に見てみましょう(私はこれにもっと慣れ親しんでいるので、Javaのこれらの例 - それについては残念です):

  1. パラメータ数

     public class Mathematics { 
         public int add (int a, int b) {
             return (a + b);
         }
    
         public int add (int a, int b, int c) {
             return (a + b + c); 
         }
    
         public int add (int a, int b, int c, int c) {
             return (a + b + c + d);
         }
     }
    

    注意深く見れば、メソッドの戻り値の型は同じintであることがわかりますが、これらのメソッドの数は入力の数が異なります。これは、異なる数のパラメータを使用してロードする方法と呼ばれます。

    PS:これは単なるです。このような追加関数を定義する必要はありません。

  1. パラメータのタイプ

    public class Mathematics { 
        public void display (int a) {
            System.out.println("" + a);
        }
    
        public void display (double a) {
            System.out.println("" + a);
        }
    
        public void display (float a) {
            System.out.println("" + a);
        }
    }
    

    各メソッドは同じ名前と同じ戻り型を持ち、入力データ型は異なります。

    PS:この例は目的を説明するためのものです。

  1. パラメータの順序

    public class Mathematics {
        public void display (int a, double b) {
            System.out.println("Numbers are " + a + " and " + b);
        }
    
        public void display (double a, int b) {
            System.out.println("Numbers are " + a + " and " + b);
        }
    }
    

    PS:この例は目的を説明するためのものです。

メソッドオーバーライド

メソッドのオーバーライドは、クラス間の多態性を使用する方法です。あるクラスが他のクラスから継承されている場合、前者(サブクラス)は後者の(スーパークラスの)メソッドをオーバーライドして実装を変更できます。

これは、スーパークラスがメソッドのより一般的な実装を定義し、サブクラスがより具体的なメソッドを使用する場合に使用されます。

次の例を考えてみましょう。

私たちは哺乳動物のためのクラスを持っています:

class Mammal {
  void whoIam () {
    System.out.println("I am a Mammal");
  }
}

それから、私たちは哺乳類である犬のためのクラスを持っています:

class Dog extends Mammal {
  @Override
  void whoIam () {
    super.whoIam();
    System.out.println("I am a Dog!");
  }
}

この例では、哺乳動物が哺乳動物であると言うMammalクラスのwhoIam()メソッドを定義します。しかし、これは一般的な言葉です。そこには多くの哺乳動物がいるからです。その後、我々は継承できDogからクラスをMammal犬は哺乳類であるとして、クラス。しかし、より具体的には、犬は哺乳動物だけでなく犬でもあります。したがって、犬は、 I am a Mammalあり、またI am a Dog犬であると言うべきI am a Dog 。したがって、 whoIam() Dogクラス)のスーパークラス( Mammalクラス、つまりwhoIam()whoIam()メソッドをオーバーライドできます。

Javaでsuper.whoIam()を使用してスーパークラスのメソッドを呼び出すこともできます。それからDogDogように振る舞い、哺乳動物のように振る舞います。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow