面向对象三大特征:封装、继承、多态。
今天,我们来了解一下多态。
什么是多态
多态指同一个实体同时具有多种形式,指为不同数据类型的实体提供统一的接口。它是面向对象程序设计(OOP)的一个重要特征。
eg:品鉴师要品菜,一号厨师煮出了淮扬菜,二号厨师炒了东北菜。
多态的好处
主要是利于代码扩展
多态的类型
分为运行时的多态和编译时的多态
运行时的多态:通过覆写虚成员实现。直到系统运行时,才根据实际来决定实现哪种操作
编译时的多态:通过重载来实现。根据传递的参数、返回的类型等信息决定实现何种操作
结合设计模式
运算类(父类)
public class Operation { private double _numberA = 0; private double _numberB = 0; /// <summary> /// 数字A /// </summary> public double NumberA { get { return _numberA; } set { _numberA = value; } } /// <summary> /// 数字B /// </summary> public double NumberB { get { return _numberB; } set { _numberB = value; } } /// <summary> /// 得到运算结果 /// </summary> /// <returns></returns> public virtual double GetResult() { double result = 0; return result; }
加法、减法(子类)
class OperationAdd : Operation//加法 { public override double GetResult()//子类重写父类的方法 { double result = 0; result = NumberA + NumberB; return result; } } class OperationSub : Operation//减法 { public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; } }
利用简单工厂实例化对象
public class OperationFactory { public static Operation createOperate(string operate) { Operation oper = null; switch (operate) { case "+": { oper = new OperationAdd(); break; } case "-": { oper = new OperationSub(); break; } } return oper; } }
main程序
static void Main(string[] args) { Operation oper; oper = OperationFactory.createOperate("+");//通过简单工厂创建对象 oper.NumberA = 1; oper.NumberB = 2; double result = oper.GetResult(); Console.WriteLine(result); }
所以通过上面的例子得出多态实现机制主要表现:在父类和继承该父类的一个或多个子类对某些方法的重写,多个子类对同一方法的重写可以表现出不同的行为。