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.用抽 ...
随机推荐
- P4317 花神的数论题
题目 洛谷 数学方法学不会%>_<% 做法 爆搜二进制下存在\(i\)位\(1\)的情况,然后快速幂乘起来 My complete code #include<bits/stdc++ ...
- 线程同步synchronized和ReentrantLock
一.线程同步问题的产生及解决方案 问题的产生: Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突. 如下例:假设有一个卖票 ...
- PHP类的变量与成员,及其继承、访问与重写要注意的问题
PHP的类及其实例: <?php ?> 后期静态绑定:为了避免子类重写静态属性后,使用继承来的方法仍然方法父类的静态属性,PHP5.3增加了一个新的语法,后期静态绑定,使用static关 ...
- PHP面向对象之对象和引用
在PHP中对象类型和简单变量类型表现可以说是大相径庭,很多数据类型都要可以在写时进行复制,如当写代码$a=$b时,两个变量因为赋予相同的值而告终.所以需要注意的是,这种情况用在对象时就会完全不同了. ...
- IntelliJ IDEA 中 右键新建时,选项没有Java class的解决方法和具体解释
我是在别人问我的时候,才发现还可以有这个问题,主要是他新项目直接打开,什么都没配置,就打算新建文件,其实可以直接看编辑器右下角的event log,那个对话框点开的话,可以add as maven p ...
- 80X86寄存器详解<转载>
引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识, 自然,还是得从最基础的开始,那就从汇编语言开刀吧, 从汇编语言开刀的话,我们必须还先要了解一些其他东西, 像 CPU ...
- UVA 10200 Prime Time 水
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- hdoj1005--Number Sequence
Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...
- HTTP的长连接和短连接(转)
一.什么是长连接 HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包.不四次握手),等待 ...
- SDNLAB技术分享(四):利用ODL下发流表创建VxLAN网络
邓晓涛,当前就职于江苏省未来网络创新研究院,是CDN团队的一名研发人员,主要从事SDN相关的研发相关工作.曾就职于三星电子于先行解决方案研发组任高级工程师.思科系统于云协作应用技术部(CCATG)任工 ...