メソッドのオーバーロードは、関数のオーバーロードまたはコンパイル時ポリモーフィズムとも呼ばれ、同じスコープ内で名前は同じでシグネチャが異なる2つ以上のメソッドを持つという概念です。 この機能をサポートする多くのプログラミング言語があります:Ada、C ++、C#、D、そしてJava。
C#でのメソッドのオーバーロードの例
クラスOverloadShapes {float Polygon(int radius、float pi){float circleArea = pi * radius * radius;}; } int Polygon(int length、int width){int RectangularArea = length * breadth;} } int Polygon(int side){int squareArea = side * side;} }}1 2 3 4 5 6 7 8 9 10 11 12 13 14 | クラスOverloadShapes {float Polygon(int radius、float pi){float circleArea = pi * radius * radius;}; } int Polygon(int length、int width){int RectangularArea = length * breadth;} } int Polygon(int side){int squareArea = side * side;} }} |
上記の例に示されているように、メソッド 'Polygon'は、異なるメソッドシグネチャで3回オーバーロードされています。つまり、パラメータの種類や数が異なります。
メソッドのオーバーライド
メソッドオーバーライドは、関数オーバーライドまたはランタイムポリモーフィズムとも呼ばれ、子クラスが親クラスで定義されたメソッドに独自の実装を提供できるようにするOOP機能です。 子クラス内のメソッドが同じ名前、シグニチャ、および戻り型を持つ必要がある場合、子クラス内の実装は基本クラス内のメソッドの定義をオーバーライドします。
C#でオーバーライドするメソッドの例
クラスSource1 {public void draw(){Console.Writeline( "私はクラスSource1にいます"); クラスSource2はソース1を拡張します{public void draw(){Console.Writeline( "私はクラスSource2にいます"); }}1 2 3 4 5 6 7 8 9 10 | クラスSource1 {public void draw(){コンソール。 Writeline( "私はSource1クラスにいます"); クラスSource2はSource1を拡張します。{public void draw(){コンソール。 Writeline( "私はSource2クラスにいます"); }} |
ここでは、Source2クラスのdrawメソッドがSource1クラスで定義されたdrawメソッドをオーバーライドしています。
メソッドのオーバーロードとメソッドのオーバーライドの違い
- メソッドオーバーロードメソッドは異なるシグネチャを持たなければなりません。 methodでは、オーバーライドするメソッドは同じシグネチャを持つ必要があります。
- 関数のオーバーロードは、メソッドの動作に「追加」または「拡張」することです。 関数の上書きとは、メソッドの動作を完全に「変更」または「再定義」することです。
- メソッドオーバーロードは、コンパイル時ポリモーフィズムを実現するために使用されます。 メソッドオーバーライドは、ランタイムポリモーフィズムを実現するために使用されます。
- メソッド/関数オーバーロードコンパイラでは、コンパイル時にどのオブジェクトがどのクラスに割り当てられているかがわかりますが、メソッドオーバーライドでは、この情報を実行時まで認識できません。
- 関数のオーバーロードは同じクラスで行われますが、オーバーライドは基本クラスから派生したクラスで行われます。