Java编程思想学习笔记(7)——多态

前言:本节主要介绍《Java编程思想》第8章的主要内容

8.1 再论向上转型:对象既可以作为它自己本身的使用,也可以作为它的基类使用。后者我们可以把它称之为向上转型(基类在继承树的画法上是放置在上方的)
一、忘记对象类型:在这里书中提出一个问题,就是在定义类的时候为什么用基类进行定义,而不是直接用导出类进行定义。原因:这样做为了在以后写方法的时候,用基类进行定义,这样传入参数可以直接用导出类了;所以好处是:可以减少写代码的工作量,节省成本。
8.2 转机
一、方法调用绑定:将一个方法调用同一个方法主体关联起来被称作绑定。若在程序执行前进行绑定(如果有的话,由编译器和连接程序实现),叫做前期绑定。例如,C只有一种方法调用,那就是前期绑定。前期绑定有一个致命的缺点,当出现多个导出类时,然后像方法传入这些导出类的父类,编译器无法辨别这个导出类到底是哪一个父类。解决这个办法的方式是进行后期绑定,它的含义是:在运行时进行根据对象的类型进行绑定。后期绑定也叫做动态绑定或运行时绑定,通过后期绑定,编译器可以在运行时判断出对象的类型,无论传入的是基类还是其它类。
二、产生正确的行为:一旦知道Java中的所有方法都是通过动态绑定实现多态这个事实之后,我们就可以编写只与基类打交道的程序代码了,并且这些代码对所有导出类都可以正确运行。
三、可扩展性:由于多态的存在,我们可根据自己的需求对系统添加任意多的类型,而不更改一些方法。在一个设计良好的OOP程序中,大多数或者所有的方法只与基类接口进行通信。这样的程序是可扩展的,因为可以从通用的基类继承出新的数据类型。这样的程序是可扩展的,因为可以从通用的基类继承出新的数据类型,从而添加一些功能。那些操控接口的方法不需要任何改动就可以应用于新类。**多态是一项让程序员“将改变的事物与未变的事物分离开来”的重要技术。
四、尽管多态存在着诸多好处,但是仍然存在这一些缺陷,首先就是对于类中的私有方法不能被覆盖,并且对于静态方法也是爱莫能助的,静态方法与类相关联而不是只与单个对象相关联。
8.3 构造器和多态
一、构造器调用顺序
1).调用基类构造器。这个步骤会不断地反复递归下去,首先是构造这种层次结构的根,然后是下一层导出类,等等,直到最低层的导出类
2).按申明顺序调用成员的初始化方法。
3)调用类构造器的主体。
二、继承与清理:如果一个类的子对象要依赖于其它对象,销毁的顺序应该和初始化顺序相反。
三、构造器内部的多态方法的行为:这里补充完整了初始化的实际过程。
就是在一、的1)之前加上:在其他任何事物发生前,将分配给对象的储存空间初始化成二进制的零。

8.4 协变返回类型 :即覆盖方法可以返回基类方法返回类型的某种导出类型。
8.5 用继承进行设计:当我们使用现成的类来建立新类时,如果首先考虑使用继承技术,反倒会加重我们的设计负担,使事情变得不必要地复杂起来。
更好的方式就是先使用“组合”,尤其是不能确定使用哪种方式时。组合不会强制我们进入继承的层次结构中。组合更加灵活,因为它可以动态选择类型。相反,继承在编译时就需要知道确切类型。
一、采取“纯粹”的方式来创建继承层次结构似乎是最好的方式。也就是说,只在基类中已经建立的方法才能在导出类进行覆盖。(is-a关系),这样多态就能够完全处理这些类。但是也存在一些缺点:导出类接口拓展的部分不能被基类访问,从而一旦向上转型,就不能访问基类没有的方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值