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初始化及类的加载

  注:基类的加载总是最优先的,静态也是优先的。初始化过程总是从内到外的,即从基类到扩展类。

  

 

posted @ 2018-01-11 22:49  萌新啊萌新是我  阅读(218)  评论(0编辑  收藏  举报