前两篇博客介绍了面向对象的封装和继承,接下来介绍面向对象的第三大特性:多态。
*定义
同意操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类复写积累中的虚函数型方法来实现。
**类型
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; }
我是一条线。
我是一个圆。
原文:http://blog.csdn.net/u010924897/article/details/23292633