前两篇博客介绍了面向对象的封装和继承,接下来介绍面向对象的第三大特性:多态。
*定义
同意操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类复写积累中的虚函数型方法来实现。
**类型
1.编译时的多态性
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
2.运行时的多态性
运行时的多态性就是指到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性通过复写虚成员实现。
***相关概念
1. 虚方法
声明:使用virtual关键字
调用虚方法,因刑事将确定调用对象是什么类的实例,并调用适当的覆写的方法。
虚方法可以有实现体。
2.重载和覆写对比
****注意
1.子类以父类的身份出现,但在工作时以自己的方式来实现。
2.子类以父类身份出现时,子类特有的属性和方法不可以使用。
*****实例
public class DrawingBase
{
public virtual void Darw() //加了virtual,为虚方法,可以被子类重写
{
Console.WriteLine("我是一个普通绘图对象。");
}
}
public class Line : DrawingBase
{
public override void Darw() //override,表示方法重写
{
Console.WriteLine("我是一条线。");
}
}
public class Circle : DrawingBase
{
public override void Darw() //override,表示方法重写
{
Console.WriteLine("我是一个圆");
}
}
static void Main(string[] args)
{
DrawingBase dObj = new DrawingBase[2];
dObj[0] = new Line();
dObj[1] = new Circle();
foreach (DrawingBase drawObj in dObj) ;
drawObj.Draw();
return 0;
}
我是一条线。
我是一个圆。