Java编程思想第七章复用类
7.1组合语法
在一个类中引入多个对象,以提高代码的复用性与功能。
7.2继承语法
使用继承子类可以获得,导出类可以获得基类的成员(变量与方法)。
注:这里注意权限控制,若基类中的成员为默认权限,只有在同一包下才能继承得到。protect修饰时,导出类可以获取。public修饰时,任何类都可以拿到。private修饰就属于基类自己的东西了。
为了解决导出类中调用父类同名方法出现递归问题,java提出了super关键字解决这个问题。
在继承体系中,初始化都是由内向外的,即由基类到导出类扩散的,即先初始化基类在初始化导出类。
注:在这个过程中,编译器会在导出类的无参构造器中调用基类的无参构造器。
7.3代理
在扩展类中创建功能类的对象。扩展类中提供功能接口,其实现均有功能类完成。
7.4结合使用组合和继承
确保正确清理:
注意在代码的过程中,要是用try{}finally{}模块,try的保护功能是,无论try中的代码怎么返回,finally{}域中的代码都会执行。
名称屏蔽:
java中不存在名称屏蔽,即导出类与基类的重载并不相互影响。为了解决重写的声明,在jdk1.5中提出了@Override注解来标明重写方法。
7.5组合与继承
其实从我目前来看,组合几乎很多很多,但是继承出现的场景很少。
特别是现在分布式大行其道,大家都在想着如何拆分,继承这种耦合性强的功能,使用起来肯定需要很深的思考与整理才能发挥好的作用。
7.6protect关键字
修饰内容对导出类(子类)是可见的。
7.7向上转型
即在参数处使用基类,可以接受导出类的对象。
实际上就是另一种方式的父类引用指向子类,是java三大特性多态的一种体现。(下一章就要再一次理解多态啦)。
7.8final关键字
该关键字意味着无法改变的,基于设计或效率两方面考量。
注:一个即被static修饰,又被final修饰的域,只占据一个不能改变的存储空间。(常量池中?这点书中并没有指明。)
对基本数据类型,final使数值不变(相当于变成常量),对于引用数据类型,final使引用恒定不变。
空白final,指被声明final又未给定初值的域。但是无论什么情况编译器都会保证空白final在使用前被初始化。
final参数
使用final修饰参数,这意味着无法在方法使用的过程中,更改参数引用所指向的对象。
final方法
将方法锁定,以防止任何继承类修改它的含义。另一点是关于效率,但是这在新版本中已经交由JDK去做了。
final与private关键字
类中所有的private方法都隐式指向final。这正是由于private方法是无法获取的。
但是这并不意味着“覆盖”一个private方法是有效果的。实际上覆盖是基类提供的接口才能进行覆盖,如果你拿不到这个接口怎么能谈得上覆盖呢?
7.9初始化及类的加载
注:基类的加载总是最优先的,静态也是优先的。初始化过程总是从内到外的,即从基类到扩展类。
Java编程思想第七章复用类的更多相关文章
- [Java编程思想] 第七章 复用类
第七章 复用类 第一种方法非常直观:只需在新的类中产生现有类的对象(组合). 第二种方法更细致一些:它按照现有类的类型来创建新类(继承). 7.1 组合语法 只需将对象引用置于新类中即可. cla ...
- Java编程思想——第17章 容器深入研究 读书笔记(三)
七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...
- Java编程思想——第17章 容器深入研究(two)
六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ...
- Java编程思想 第21章 并发
这是在2013年的笔记整理.现在重新拿出来,放在网上,重新总结下. 两种基本的线程实现方式 以及中断 package thread; /** * * @author zjf * @create_tim ...
- java编程思想笔记(第一章)
Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5 ...
- 《Java编程思想》笔记 第七章 复用类
1.组合 将其他类的对象引用置于新的类中. 3.继承 extends 从已知的一个类中派生出新的一个类,叫子类.子类实现了父类所有 非私有化 非静态 的属性和方法,并能根据自己的实际需求扩展出新的行为 ...
- 《java编程思想》P125-P140(第七章复用类部分)
1.类的成员默认的是包访问权限.允许包内成员访问 2.super.scrub() 调用基类的scrub方法 3.继承并不是复制基类的接口.当创建了一个导出类(子类)对象时,该对象包含了一个基类的子对象 ...
- 初读"Thinking in Java"读书笔记之第七章 --- 复用类
组合语法 将对象引用置于新类中,即形成类的组合. 引用初始化方法 在定义处初始化. 在类的构造器中初始化. 在使用这些对象之前,进行"惰性初始化". 使用实例初始化. 继承语法 J ...
- Java编程思想学习(七) 抽象类和接口
1.抽象类和抽象方法 抽象方法:不完整的,仅有声明而没有方法体. abstract void f(); 抽象类:包含抽象方法的类.(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的.) 1.用抽 ...
随机推荐
- 【HackerRank】Service Lane
Calvin is driving his favorite vehicle on the 101 freeway. He notices that the check engine light o ...
- Python编程-函数进阶
一.函数对象 函数是第一类对象,即函数可以当作数据传递 1 可以被引用 2 可以当作参数传递 3 返回值可以是函数 4 可以当作容器类型的元素 def foo(): print('from foo') ...
- linux下安装LAMP环境,也就是PHP+linux的开发运行环境(centos7)
注:整理至http://blog.51cto.com/afterdawn/1923139 LAMP(linux.apache.mysql.php),是四个套件的合成,简单讲就是要把php运行在linu ...
- 在Linux系统下使用Docker以及Weave搭建Nginx反向代理
Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...
- vRO Extend VirtualDisk Workflow
https://vbombarded.wordpress.com/2015/02/20/vrealize-orchestrator-extend-virtual-disk-workflow/ var ...
- JMeter学习(七)聚合报告之 90% Line 正确理解
90% Line 参数正确的含义: 虽然,我的上面理解有一定的道理,显然它是错误的.那看看JMeter 官网是怎么说的? 90% Line - 90% of the samples took no m ...
- Centos7 搭建DNS服务器与原理配置详解
在搭建我们自己DNS服务器之前,先必须了解下DNS服务器的作用和原理. DNS是在互联网上进行域名解析到对应IP地址的服务器,保存互联网上所有的IP与域名的对应信息,然后将我们对网址的访问,解析成IP ...
- 【P1379】八数码难题(搜索+暴力)
这个题真是... 不想说什么了,及其复杂和烦人的一道题.基础思路就是bfs,用两个队列分别进行0的位置的计算和每一步的状态..然而这个题最重要的一点在于判重,实际上可以康托展开用全排列的个数进行判重, ...
- 织梦dedecms 自带采集的缩略图地址后面有“/”斜杠的解决方法
本来想偷懒在网上找一些文档去解决织梦采集缩略图地址带“/”的问题的,可是找了找发现没有人写出解决方法,只好自己动手了. 过程很复杂,找了问题的原因也是找了半天,自己一点一点的测试.最后找到了问题所在. ...
- python 处理json
Python处理JSON 概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XM ...