一道面试题 : 多态的作用 ? 摘录 网友的 回答!
多态有编译时多态 和运行时多态。
第一个是通过方法重载实现;第二个是通过方法覆盖实现(子类覆盖父类方法)。
第一种就是我们调用方法是不用区分参数类型,程序会自动执行相应方法,如: 加法运算,可以使int相加,可以是double相加,都是同一个方法名。
第二种就是动态绑定,使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。 这样的作用就是扩展性极好,玩过网游的话应该知道 游戏中有不同的角色,它们都有一个父类,它们做相同动作时表现出来的效果就会不一样,比如跑,魔法师的跑跟战士的跑就不会一样,这就是俩者都覆盖了父类中的跑方法,各自有自己的现实,表现出来多态。 如果有一天你想再加个角色,只用再写一个类继承该父类,覆盖其中的跑方法就行了,其他代码不用怎么改,所以可维护性也很好
如果要回答的完整一些的话,我觉得应该先说一下什么是多态,然后说一下面向对象方法相对于过程化方法的优势,及多态在其中的作用。
多态简单的说就是单接口多实现。在面向过程分析方法中,整个系统是由数据流驱动的一个组织严密的体系,而面向对象分析方法则强调各对象是相对独立的,只有在特定场景中才会产生交互,多态特性维护了对象交互的稳定性。
嗯,浓缩成一句话的话,应该就是降低代码耦合度了。
高内聚和低耦合是相互矛盾的,如果一个类中的代码高度相关则此类完成的功能相对单一,即各个类间的依赖性肯定很大,所以耦合度也非常大。反之亦然。
高内聚,低耦合的系统具有更好的重用性,维护性,扩展性。
多态都不理解,不进华为是理所当然的。
多态讲的是事物之间共性的抽象,比如汽车A,汽车B,汽车C,你都定义一个类去描述它,显然,他们之间有汽车共同的定义是重复的,那么他们三个共同继承汽车类,那么显然,减少了代码的冗余,同时汽车类被A,B,C三个子类使用,那么代码的复用程度高了
又有,对于开车这个动作,我们不需要关心他是A,B还是C车,因为开法都是一样的,这样我们对于开车,只需要定义一个函数开车,它实际可以开A,B,C车,而不用为A,B,C车分别定制开车,同样减少了代码冗余,再者,若A,B,C车开车的动作发生了一些调整,比如我们原来是手动档,现在变成自动档,,若你 A,B,C车各有一个开车的函数,那么,你是不是每个函数都需要修改,而多态的开车函数,我只需要修改一个函数,那么可维护性是不是提高了?
另外由于使用多态一些共用的处理车的方法已经提供了,那么你新增加的D车还是可以使用的,你新增加的D车只要提供D车一些特殊的操作方法就OK了,这样代码的可扩展性就提供。
耦合度讲的是模块模块之间,代码代码之间的关联度,通过对系统的分析把他分解成一个一个子模块,子模块提供稳定的接口,达到降低系统耦合度的的目的,模块模块之间尽量使用模块接口访问,而不是随意引用其他模块的成员变量,就像一个电脑主机,你主板,cpu,显卡,硬盘之间到处飞线连接,而不是使用我们标准的pci,sata硬盘接口等标准接口,那么你哪个部件坏了,要拆下来修理,是不是很麻烦。