多态

一、什么是多态?

  概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。

  比如有一个父类superClass,它有2个子类subClass1,subClass2。superClass有一个方法 func(),两个子类都重写了这个方法。那么我们可以定义一个superClass的引用obj,让它指向一个子类的对象,比如superClass obj = new subClass1();那么我们调用obj.func()方法时候,会进行动态绑定,也就是obj它的实际类型的func()方法,即subClass1的func()方法。同样你写superClass obj = new subClass2();obj.func()其实调用的是subClass2的func()方法。这种由于子类重写父类方法,然后用父类引用指向子类对象,调用方法时候会进行动态绑定,这就是多态。多态对程序的扩展具有非常大的作用,比如你要再有一个subClass3,你需要改动的东西会少很多。

二、为什么要使用多态?

  多态可以把不同的子类对象当作父类来看,可以屏蔽不同子类之间的差异,写出通用的代码,做出通用的编程,以适用需求的不断变化。

  在提到多态时不得不提的是封装和继承,封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面,他把实现的细节全部隐藏起来了,例如:在java中取实现一个类,这个类中提供了一些功能方法,你只需知道你需要传递什么参数,会达到什么效果,来使代码模块化。继承可以扩展已经存在的代码模块,而目的就是为了使代码重用。

  多态除了代码的复用,还可以解耦,耦合度就是模块与模块之间,代码与代码之间的关联度,通过对系统的分析把他分解成一个一个子模块,子模块提供稳定的接口,达到降低系统耦合度的目的,模块与模块之间尽量使用模块接口访问,而不是随意引用其他模块的变量成员。

  多态的优点:

  1.应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。

  2.派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。

3. 多态的实现方式

  1.  虚方法

  关于虚方法需要注意的几点:
    1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
    2.虚方法在父类中必须有实现,哪怕是空实现。
    3.虚方法子类可以重写(override),也可以不重写

  2. 抽象类

  关于抽象方法注意的几点:
    1.需要用abstract关键字标记
    2.抽象方法不能有任何方法实现。
    3.抽象成员必须包含在抽象类中。
    4.由于抽象成员没有任何实现,所以子类必须将抽象成员重写。
    5.抽象类不能实例化,抽象类的作用就是为了让子类继承。
    6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。
    7. 还有抽象方法不能用static修饰

  3. 接口

  关于接口要注意以下几点:

    1.接口中只能包含方法(属性、事件、索引器也都是方法)
    2.接口中的成员都不能有任何实现。光说不做
    3.接口不能被实例化。
    4.接口中的成员不能有任何访问修饰符。(默认为public)
    5.实现接口的子类必须将接口中的所有成员全都实现。
    6.子类实现接口的方法时,不需要任何关键字,直接实现即可。
    7.接口存在的意义就是为了多态。

 

posted @ 2020-03-13 11:09  年轻无极限zx  阅读(132)  评论(0)    收藏  举报