20

ポリモーフィズムはオーバーロードの別の用語ですか?

4

4 に答える 4

43

いいえ; オーバーロードとは、異なる量のパラメーターを持つ、または別の型のパラメーターを持つ同じ名前のメソッドを作成することです。

ポリモーフィズムとは、特定のメソッドの実装/機能をさまざまな型 (すべて同じ「基本型」を持つ) にわたって変更することです。

過負荷:

public class TestClass
{
    public void DoSomething( int a, int b ) {}

    public void DoSomething( int a, int b, string x ) {}
}

ポリモーフィズム:

public abstract class Base
{
    public abstract DoSomething();
}

public class A : Base
{
    public override DoSomething()
    {
         Console.WriteLine("I am A");
    }
}

public class B : Base
{
     public override DoSomething()
     {
         Console.WriteLine("I am B");
     }
}
于 2009-05-05T13:06:21.390 に答える
10

ポリモーフィズムとメソッドのオーバーロードの違いは、実行する実際のメソッドが決定される時間にあります。この理由は、次のようにメソッドがオーバーロードされている場合です。

account = new BankAccount();
account = new BankAccount(1000);

コンパイラは、提供されるパラメーターの数と型を含め、メソッド シグネチャによって使用するコンストラクターを判断できます。プログラムが実行される前に、コンパイル時に使用するメソッドのこの選択は、事前バインディングと呼ばれます。一方、x.getMeasure() などのポリモーフィック メソッド呼び出しを使用する場合、実際に呼び出される getMeasure() メソッドは、x が参照するオブジェクトのタイプによって異なります。オブジェクトはプログラムが実行されるまで構築されないため、呼び出されるメソッドは実行時に決定されます。したがって、コンパイラではなく、仮想マシンが適切な方法を選択します。この方法の選択は、遅延バインディングと呼ばれます。

于 2009-05-05T13:08:35.690 に答える
5

いいえ。

ポリモーフィズムは、統一されたインターフェイスを使用してさまざまなデータ型の値を処理できるようにするプログラミング言語の機能です。パラメトリック ポリモーフィズムの概念は、データ型と関数の両方に適用されます。さまざまな型の値を評価または適用できる関数は、多態性関数と呼ばれます。一般化された型のように見えるデータ型 (たとえば、任意の型の要素を持つリスト) は、そのような特殊化が行われる一般化された型のような多形データ型として指定されます。

メソッドのオーバーロードは、Ada、C#、C++、D、Java などのさまざまなプログラミング言語に見られる機能であり、入力の型と型の点で互いに異なる同じ名前の複数のメソッドを作成できます。関数の出力。

メソッドのオーバーロードを型ポリモーフィズムまたは仮想関数と混同しないでください。それらでは、実行時に正しいメソッドが選択されます。

出典:ウィキペディア。

于 2009-05-05T13:16:47.357 に答える
1

いいえそうではありません。

オーバーロードとは、名前が同じでパラメーターが異なり、言語によっては戻り値の型が異なるメソッドまたは演算子を作成することを指します。

オーバーライドとは、派生クラスで同じシグネチャを持つメソッドを再実装することを指し、ポリモーフィズム (オブジェクトの実際の型に応じて、上書きされたメソッドのどの実装を呼び出すかを実行時に決定する) を有効にします。

class BaseClass
{
     public void DoStuff(Int32 value) { } // Overloading

     public void DoStuff(String value) { } // Overloading

     public virtual void DoOtherStuff(String value) { }
}

class DerivedClass : BaseClass
{
    public override void DoOtherStuff(String value) { } // Overriding
}

使用例

BaseClass instance = null;

if (condition)
{
    instance = new BaseClass();
}
else
{
    instance = new DerivedClass();
}

// Using overloads
instance.DoStuff(4);
instance.DoStuff("four");

// Polymorphism - it depends on the actual type of the object
// referenced by the variable 'instance' if BaseClass.DoOtherStuff()
// or DerivedClass.DoOtherStuff() will be called at runtime.
instance.DoOtherStuff("other stuff");
于 2009-05-05T13:13:54.600 に答える