多态是否是超载的另一个术语?

时间:2009-05-05 13:04:41

标签: polymorphism overloading terminology

多态是否是超载的另一个术语?

4 个答案:

答案 0 :(得分: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");
     }
}

答案 1 :(得分:10)

多态和方法重载之间的区别在于确定实际执行方法的时间。原因是当方法重载时,例如:

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

编译器可以告诉方法签名使用哪个构造函数,包括提供的参数的数量和类型。在程序运行之前,在编译时使用的这种方法的选择称为早期绑定。 另一方面,当我们使用多态方法调用(如x.getMeasure())时,调用的实际getMeasure()方法取决于x引用的对象类型。因为在程序运行之前不构造对象,所以在运行时确定调用的方法。因此,虚拟机,而不是编译器选择适当的方法。此方法选择称为后期绑定。

答案 2 :(得分:5)

没有

Polymorphism 是一种编程语言功能,允许使用统一接口处理不同数据类型的值。参数多态的概念适用于数据类型和函数。可以评估或应用于不同类型的值的函数称为多态函数。可以看起来是通用类型的数据类型(例如,具有任意类型的元素的列表)被指定为多态数据类型,类似于进行这种特化的通用类型。

Method overloading 是各种编程语言中的一项功能,例如Ada,C#,C ++,D和Java,它们允许创建多个具有相同名称的方法,这些方法彼此不同在输入类型和函数输出类型方面。

不应将方法重载与类型多态或虚函数混淆。在那些中,在运行时选择正确的方法。

来源:维基百科。

答案 3 :(得分: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");