多态是否是超载的另一个术语?
答案 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");