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 回答