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初始化及类的加载
注:基类的加载总是最优先的,静态也是优先的。初始化过程总是从内到外的,即从基类到扩展类。