关于面向对象——多态
理解多态:同一个操作作用与不用类的实例,产生不同的执行结果。
分两种:编译性时多态(重载)和运行时多态(覆盖)
重载: 同一个作用域内允许多个同名函数,这些参数(参数个数不同或者参数类型不同或者两者都不同)。
ps:因编译时已确认函数名称,是静态的,so 运行速度快
覆盖:子类重新定义父类的虚函数做法。
ps:子类重新定义父类的虚函数后,父类指针分配给子类,动态调用子类函数。
覆盖:分两种:1.虚函数 2.接口多态
关于虚函数执行过程:对象A调用fun()--->检查fun是否是虚函数--->否,直接调用fun
---->是,检查A对象是否 override fun(),--->是,直接调用
----->否,检查A的父类或者父类的父类,直到找到 override fun() 为止,调用即可。
详见:
tks:http://blog.163.com/road0904@126/blog/static/6302267820087544419774/
关于接口多态执行过程:
如同 虚函数一样,即:谁的实例就调用谁的办法。
详见:
tks:http://www.cnblogs.com/FreeDong/archive/2012/08/11/2626312.html
总结:
多态的运用场景很多,特别是在设计模式(创建者、结构型模式)当中,几乎是离不开多态。注意:深层次继承,提高程式耦合度,将程式变复杂。
而我们使用多态的思想就是,抽象他们的共同点,不去考虑他们的具体实现。