一般我们指的多态性是指“运行时的多态性”,也就是在程序运行时,系统根据不同的对象确定调用对象所属类的相应方法的能力。
示例
namespace Cftea
{
public class BaseClass
{
public virtual string GetStringVirtual()
{
return "基类虚方法。";
}
public string GetString()
{
return "基类方法。";
}
}
public class DerivedClass : BaseClass
{
public override string GetStringVirtual()
{
return "派生类重写方法。";
}
public new string GetString()
{
return "派生类隐藏方法。";
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DerivedClass derivedClass = new DerivedClass();
BaseClass baseClass = derivedClass;
MessageBox.Show("derivedClass.GetStringVirtual() 结果是:" + derivedClass.GetStringVirtual() +
"\r\n" +
"baseClass.GetStringVirtual() 结果是:" + baseClass.GetStringVirtual() + "\r\n" +
"derivedClass.GetString() 结果是:" + derivedClass.GetString() + "\r\n" +
"baseClass.GetString() 结果是:" + baseClass.GetString());
}
}
}
运行结果是:

我们可以看到,derivedClass 与 baseClass 类型不同,但是指向的都是 new DerivedClass():
- 他们在调用 GetStringVirtual() 时,使用的都是派生类的。(多态性)
- 他们在调用 GetString() 时,使用的是各自类型所在的方法。
从这里我们可以看出重写与隐藏的区别了。
浙公网安备 33010602011771号