java编程思想第八章多态
前言:
封装:通过合并特征和行为创建新的数据类型。
实现隐藏:通过将细节“私有化”,把接口和实现分离。
多态:消除类型间的耦合关系。也称作动态绑定,后期绑定或运行时绑定。
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编程思想第八章多态的更多相关文章
- 《 Java 编程思想》CH08 多态
在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征. 多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开来. "封装"通过合并特征和行为来创建新的数据类 ...
- Java编程思想学习(六) 多态
1.Java语言的三大特性:继承.封装和多态. 继承:复用类的一种方法,可以简省很多代码: 封装:通过合并特征和行为来创建新的数据类型.[这种“数据类型”跟Java本身提供的8大“基本数据类型”的地位 ...
- Java编程思想学习(一)----对象导论中多态的理解
1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都 ...
- 《Java编程思想》学习笔记_多态
多态 多态指一个行为产生多种状态,针对父类类型可接收其子类类型,最终执行的状态由具体子类确定,其不同子类可呈现出不同状态.例如人[父类]都会跑步[行为],但小孩[子类]跑步.成年人[子类]跑步.运动员 ...
- Java编程思想 (1~10)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...
- 《Java编程思想》阅读笔记一
Java编程思想 这是一个通过对<Java编程思想>(Think in java)第四版进行阅读同时对java内容查漏补缺的系列.一些基础的知识不会被罗列出来,这里只会列出一些程序员经常会 ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- Java编程思想重点笔记(Java开发必看)
Java编程思想重点笔记(Java开发必看) Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...
- java编程思想-复用类总结
今天继续读<java 编程思想>,读到了复用类一章,看到总结写的很好,现贴上来,给大家分享. 继承和组合都能从现有类型生成新类型.组合一般是将现有类型作为新类型底层实现的一部分来加以复用, ...
随机推荐
- 大数据架构之:Storm
Storm是一个免费开源.分布式.高容错的实时计算系统,Twitter开发贡献给社区的.Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求. Storm经常用 ...
- P4501 [ZJOI2018]胖
题目 P4501 [ZJOI2018]胖 官方口中的送分题 做法 我们通过手玩(脑补),\(a_i\)所作的贡献(能更新的点)为:在\(a_i\)更新\(\forall x\)更新前前没有其他点能把\ ...
- python爬虫之html解析Beautifulsoup和Xpath
Beautiifulsoup Beautiful Soup 是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据.BeautifulSoup 用来解析 HTML 比较简 ...
- Java final static关键字
Java中的final关键字 使用 final 关键字做标识有 “最终的” 含义. final 可以修饰 类.方法.属性.变量 final 修饰类: 则该类不允许被继承 final 修饰方法:则该方法 ...
- 查看git安装目录
有时候需要知道Git在电脑中的安装位置,这里简单介绍下: Mac平台:在命令行中输入which git, 就会显示git的安装位置了; Windows平台:打开cmd,输入where git就会显示g ...
- sem总结
从实况搜索这些关键词 有没有排名,有排名 不用管,没有的话 就一点点网上加价格 ,加到有为止 一个单元关键字控制30以内差不多 如果关键词词量有限 ,病种相差不大 可以不用屏蔽 投产=销量/消费订购率 ...
- python机器学习——分词
使用jieba库进行分词 安装jieba就不说了,自行百度! import jieba 将标题分词,并转为list seg_list = list(jieba.cut(result.get(" ...
- sqoop学习2(数据导入与导出)
最近学习了下这个导数据的工具,但是在export命令这里卡住了,暂时排不了错误.先记录学习的这一点吧 sqoop是什么 sqoop(sql-on-hadoop):是用来实现结构型数据(如关系型数据库) ...
- mysql在表的某一位置增加一列的命令
如果想在一个已经建好的表中添加一列,可以用诸如: alter table t1 add column addr varchar(20) not null; 这条语句会向已有的表t1中加入一列addr, ...
- cdq分治入门and持续学习orz
感觉cdq分治是一个很有趣的算法 能将很多需要套数据结构的题通过离线来做 目前的一些微小的理解 在一般情况下 就像求三维偏序xyz 就可以先对x排序 然后分治 1 cdq_x(L,M) ; 2 提取出 ...