1、首先,解释一下什么叫多态。
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
2、在C#中、多态的实现有虚方法、抽象类和接口等。这里讲抽象类和虚方法。
假设我们有三个类,Base、Son、GrandSon类。Base类是抽象类,其中有抽象方法A和虚方法B。Son类是Base类的子类,GrandSon类是Son类的子类。
(1)如果对于子类中所有A、B方法都实现了重写(override),那么使用Base类的引用去调用Son、GrandSon的A、B方法,都会使用其重写的A、B方法。
(2)如果没有都没有进行重写(abstract方法直接子类必须重写),那么哪个引用调用就指向该引用所属对象的方法。
这里假设Son类重写了A(abstract)方法但没有重写B方法,使用Base类的引用指向GrandSon调用A、B方法时。会调用Son的A方法(因为Son类重写了)和Base类的B方法。
所以这里可以归纳为,如果使用祖宗类调用儿孙类,儿孙类会从本类开始逐一往上找已重写的方法。