前言:

  封装:通过合并特征和行为创建新的数据类型。

  实现隐藏:通过将细节“私有化”,把接口和实现分离。

  多态:消除类型间的耦合关系。也称作动态绑定,后期绑定或运行时绑定。

8.1再论向上转型:

  对象既可以作为本身的类型使用,也可以作为基类的类型使用。这种做法成为向上转型。

  其代码表现就是:父类引用指向子类。

  多态允许在参数的地方使用,即参数处声明基类,用于接受基类或导出类实现。

8.2转机(主要是介绍如何实现多态)

  为了解决多态问题,在java中提供了后期绑定的方法,即在运行时根据对象的类型进行绑定。也成为动态绑定或运行时绑定。

  注:java中除了static方法和final方法,其他方法都是后期绑定。final关键字可以关闭动态绑定。

  final关键字最好根据设计来决定是否使用。千万不能通过final来提高性能,因为并不会提升性能,而且也会让程序的设计显得混乱。

  多态可以让程序员将:改变的事物与未变的事物分离开来。

  这里再次提高了试图重写基类的private方法是一种很错误的行为。

  只有普通方法的调用是多态的,静态方法不具有多态性(实际上final也没有,而且由于private隐式指向final,所以也没有)。

8.3构造器与多态

  构造器是不具有多态的,他们本质上是static方法,只不过是隐式声明。

  前面提到过:基类的构造器总是在导出类的构造过程中被调用,且按照继承层次逐渐向上调用。

  对于复杂的继承体系:

    1)调用基类的构造器

    2)按声明顺序调用成员变量的初始化方法。

    3)调用导出类的构造器本体。

  注:继承体系中,为什么这样调用?因为在导出类中要求基类是已经存在的,且基类的一切成员(public protect)都可以访问到。

  涉及到内存方面的构造过程:

    1)将分配给对象的存储空间初始化成二进制的零。

    2)调用基类构造器。

    3)按照声明的顺序调用成员的初始化方法。

    4)调用导出类的构造器主体。

  实际上构造器中,除了初始化成员外,唯一能够安全调用的方法是基类的final方法了(也适用于private方法,他们隐式为final)。

8.4协变返回类型:

  这是jdk1.5中。

  导出类的被覆盖的方法可以返回基类方法的返回类型的某种导出类型。

8.5用继承进行设计:

  实际上是表明了在继承用于设计的时候,一定要慎重,:

  继承要求在编译时就要知道确切的类型。

  用继承表达行为间的差异,并用字段表达状态上的改变。

纯继承与扩展:

  纯继承是is-a的关系:基类可以接受发送导出类的任何消息,因为二者有着完全相同的接口。我们只需要从导出类向上转型,永远不需要知道正在处理的对象的确切类型。

  实际上extends用于扩展接口,这样是一种is-like-a的关系。导出类就像一个基类,除了有着同基类相同的接口外,还有自己额外方法实现的特性。

  导出类中接口的扩展部分不能被基类访问。对于这种类型,在向上转型时的问题就在于,扩展部分不能被基类访问。

  为了解决向上转型中,无法识别扩展部分,提出了向下转型的概念。

  但是有可能出现的问题:你不知道到底要转成哪个类型。这时候就会出现运行期异常:(ClassCastException)。

  实际上在java中每一次转型都会的得到检查,称之为“运行时类型识别”(RTTI)。

  

  

  

  

java编程思想第八章多态的更多相关文章

  1. 《 Java 编程思想》CH08 多态

    在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征. 多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开来. "封装"通过合并特征和行为来创建新的数据类 ...

  2. Java编程思想学习(六) 多态

    1.Java语言的三大特性:继承.封装和多态. 继承:复用类的一种方法,可以简省很多代码: 封装:通过合并特征和行为来创建新的数据类型.[这种“数据类型”跟Java本身提供的8大“基本数据类型”的地位 ...

  3. Java编程思想学习(一)----对象导论中多态的理解

    1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都 ...

  4. 《Java编程思想》学习笔记_多态

    多态 多态指一个行为产生多种状态,针对父类类型可接收其子类类型,最终执行的状态由具体子类确定,其不同子类可呈现出不同状态.例如人[父类]都会跑步[行为],但小孩[子类]跑步.成年人[子类]跑步.运动员 ...

  5. Java编程思想 (1~10)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...

  6. 《Java编程思想》阅读笔记一

    Java编程思想 这是一个通过对<Java编程思想>(Think in java)第四版进行阅读同时对java内容查漏补缺的系列.一些基础的知识不会被罗列出来,这里只会列出一些程序员经常会 ...

  7. 《Java编程思想》学习笔记(二)——类加载及执行顺序

    <Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...

  8. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  9. java编程思想-复用类总结

    今天继续读<java 编程思想>,读到了复用类一章,看到总结写的很好,现贴上来,给大家分享. 继承和组合都能从现有类型生成新类型.组合一般是将现有类型作为新类型底层实现的一部分来加以复用, ...

随机推荐

  1. yuv转opencv中的IplImage

    http://www.2cto.com/kf/201208/145559.html http://www.opencv.org.cn/forum.php?mod=viewthread&tid= ...

  2. jQuery仿苹果样式焦点图插件

    在线演示 本地下载

  3. 20145210姚思羽《网络对抗》MSF基础应用实验

    20145210姚思羽<网络对抗>MSF基础应用实验 实验后回答问题 1.用自己的话解释什么是exploit,payload,encode. exploit就是进行攻击的那一步 paylo ...

  4. Qt开发动画

    #include <QPropertyAnimation> #include <QDesktopWidget> //下坠 void MainWindow::on_pushBut ...

  5. java基础(2)-面向对象(1)

    面向对象 面向对象思想 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程:强调的是功能行为 面向对象:将功能封装进对象,强调具备了功能的对象 面向对象是基于面向过程的 面向对象举例 ...

  6. Stacktack overview

    class Lifecycle(models.Model):    """The Lifecycle table is the Master for a group of ...

  7. struts学习(3)

    1 ognl概述 2 ognl入门案例 3 什么是值栈 (1)servlet和action区别 (2)值栈存储位置 4 如何获取值栈对象 5 值栈内部结构 6 向值栈放数据 (1)s:debug标签 ...

  8. ImageSwitch图像切换控件

    ImageSwitch图像切换控件 继承ViewAnimator所以可以做动画 继承ViewGroup所以可以装别的控件,所以ImageSwitch里面装的就是image,不过要找个ImageView ...

  9. Python爬虫之利用BeautifulSoup爬取豆瓣小说(三)——将小说信息写入文件

    #-*-coding:utf-8-*- import urllib2 from bs4 import BeautifulSoup class dbxs: def __init__(self): sel ...

  10. LightOJ - 1079 概率dp

    题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值 题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],d ...