多态——做什么和怎么做的分离

1.引子

      关于多态的使用立场可以有以下理由:

(1)为了消除各个类型之间的耦合关系

(2)将做什么和怎么做分离开来(与前一条的理由相关)

(3)为了改善代码的结构、可读性和易维护性,使得项目更具有长远的可扩展性

      面向对象的三大特性:封装、继承和多态,封装将事物的属性和行为合并隐藏在类中,继承允许将多种类型视为它自己本身的类型或者基类型对待,而多态的作用则是消除多个类型之间的耦合性,如上文(1)(2)(3)所表述的理由,再抽象点描述,就是允许运行时使用单一接口来操作导出自同一个基类的多种不同类型。

      多态特性的发挥作用的阶段在程序运行时,在编译期只能感知基类的类型。因此多态也称动态绑定、后期绑定或者运行时绑定(运行时确定具体引用对象对应的类型)。

2.多态的具体应用

      多态在使用上的具体表现可以分为两个方面:

(1)方法在父、子类上的重写(OverWrite)和重载(OverLoad)

(2)对象的多态:父类的引用指向子类对象实例——可以直接以接口或者抽象类的引用指向具体实现子类的实例对象上

 
  1. List<String> p = new LinkedList<String>();

  2. Object o = new HashSet<String>();//Object类型的变量o,指向HashSet类 型的对象

编译时p为List<String>类型,而方法的调用是在运行时确定的——编译器不感知对象的实际类型,但是在运行时的方法调用机制能够确保找到正确的方法体并调用。

3.多态的行为<——>效果    

(1)正确的行为——动态绑定实现多态

        在java中,除了static方法和final方法(private方法属于final方法)是静态绑定(编译期确定绑定关系),其他所有方法都是动态(运行时)绑定。——可以总结为“多态是通过动态绑定实现的”。

(2)可扩展性——基类接口保持不变

        由于有了多态机制,用户可以添加任意的子类和重写父类的接口,不用担心对未修改部分造成破坏,使用中所有操作父类接口的逻辑都无需改动就可以自动应用于新类,这种灵活的可扩展性就是“将改变的事物与不变的事物分离开”的重要技术。——《java编程思想》

4.小结

1)多态机制产生的必要条件:

①有父子继承关系的多个类;②子类重写父类的某些接口;③存在向上转型,即父类的引用指向子类的对象

2)多态一般都是要与其他特性结合使用

3)多态中向上转型,直接通过多态机制自动转换,用户不需要知道正在处理的对象的确切类型;向下转型必须通过强制类型转换实现。

向上转型:子类对象->父类对象 安全

向下转型:父类对象->子类对象 不安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值