多态

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态,这种特性称为多态性。

多态一般分为两种:一种是编译时的多态性,一种是运行时的多态性

编译时的多态性(重载):编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
运行时的多态性(重写):运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆盖虚成员实现的。


编译时多态需要通过重载(overload)进行实现。重载指的是同一个类中有两个或多个名字相同但是使用的参数类型、个数或顺序不同。关于重载,需要注意以下几点:
1)从重载的定义来看,重载是一种编译时多态。
2)重载不需要事先定义可重载的方法,即没有关键字。
3)重载只是针对一个类内部的几个参数不同、名称相同的方法。

 

运行时的多态性是指直到运行时,才根据实际情况决定实现何种操作。运行时多态需要通过重写来实现。重写有两种,一种需要使用override修饰符,另一种需要使用new修饰符。
1)使用override实现运行时多态,也称为重写或过载。重写是指子类对父类中虚方法或抽象方法的"覆盖",但是这种"覆盖"和用new关键字覆盖是有区别的。
2)使用new实现运行时多态,这种情况称为覆盖。覆盖指的是不同类中(基类或派生类)有两个或多个返回类型、方法名、参数都相同而方法体不同的方法。但是这种覆盖是一种表面上的覆盖,所以也叫隐藏,被覆盖的父类方法时可以调用得到的。

posted @ 2018-08-16 20:08  算盘  阅读(158)  评论(0编辑  收藏  举报