多态可以简单概括为“一个接口,多个方法”。在程序运行过程中才决定调用函数。多态性允许你将父对象设置成为和它一个或者更多个子对象相等的技术。赋值之后,父对象可以根据当前赋值给它的子对象的特性以不同方式运作。简单的说,就是将子类类型的指针赋值给父类类型的指针。
多态性在ObjectPACAL 和C++都是通过虚函数实现的。
虚函数:就是允许子类重新定义的成员函数。子类重新定义父类虚函数的做法成为“覆盖”或者成为“重写”。
其中容易混淆的是:
覆盖:指的是重新定义。当子类重新定义父类的虚函数后,父类指针根据赋给它不同的子类指针,动态的调用属于子类的虚函数。这样的函数调用在编译期间是无法确定的。因此,虚函数体现多态。
重载:允许存在多个同名函数,这些函数的参数表不同(或许参数个数不同,或者参数类型不同,或者两者都不同),对于重载函数,在编译期间就已经决定了。是静态的,属于早绑定。因此,重载和多态无关。
记住Bruce一句话“不是晚绑定就不是多态”。