java编程思想概括(第六章)---复用类

复用类

复用代码的两种形式:继承和组合

1. 组合语法(composition):将对象的引用置于新类中,编译器不是简单地为每个引用创建缺省对象,初始化这些引用:在以下位置进行:1)在定义对象的地方,(在构造器吧被调用之前被初始化)2)类的构造器中3)需要使用这些对象之前,(惰性初始化lazy initialization

2. 继承语法(inheritance):为了继承,一般的规则是将所有的数据成员都指定为private,将所有的方法指定为public,调用基类继承而来的方法,使用关键字super

3. 初始化基类:基类/导出类,当创建一个导出类的对象时,该对象包含了一个基类的子对象(subobject),在对基类子对象初始化,java会自动在导出类的构造器中插入对基类构造器的调用。

编译器合成的缺省构造器,也会自动调用基类的构造器。

带参数的构造器:必须用super显式地编写调用基类构造器的语句,配以适当的参数列表。(在有参数的导出类构造器中,必须调用基类构造器,做错了,编译器会提醒你)。

调用基类构造器,可以防止导出类构造器捕捉任何来自基类的异常。

4. 结合使用组合(composition)和继承(inheritance):编译器强制初始化基类,并不监督必须将成员对象也初始化。

5. 确保正确清除:若某个类要清除一些东西,必须显式地编写一个特殊方法来做这件事,并且这一方法必须调用。像try catch中的finally字句一样。

回收对象的最好办法:是除了内存以外,不要依赖垃圾回收器去做任何事,如果你需要进行清除,最好编写自己的清除方法,不要依赖finalize()。

6. 名称屏蔽(Name hiding):如果java的基类拥有某个已被多次重载的方法名称,那么在导出类中重新定义该方法名称,并不会屏蔽其在基类中的任何版本(这一点与C++不同)。在java中,使用与基类完全相同的签名(signature)及返回类型来重载具有相同名称的方法是一件及其平常的事。

7. 组合与继承之间选择:is-a,has-a

通过protected方法来控制类的继承者的访问权限。

8. 增量开发(incremental development):程序开发是一种增量过程,将项目视作是一种有机的、进化着的生命体去培养。通过生成和操作各种类型的对象,用来自问题空间(problem space)中的术语来表现一个模型(model)。

9. 向上转型(upcasting:理解新类是现有类的一种类型。由导出类转型成基类,在继承图上是向上移动的。因此称为“向上转型”。

10. Final数据:1)它可以是一个永不改变的“编译期常量(compile-time constant,2)它可以是一个在运行期被初始化的值,而你不希望它被改变。

Java中,这类常量必须是原始的并且以关键字final表示,对这个常量进行定义的时候,必须对其进行赋值。

一个既是static又是final的域只占有一份不能改变的存储空间。

对于原始类型,final使数值恒定不变,对于对象引用,final使引用恒定不变。

定义static强调只有一份,定义为final来说明它是一个常量。带有恒定初始值(即,编译期常量)的final static原始类型全用大写字母命名,并且字与字之间用下划线来隔开。

11. 空白final:声明为final但又未给定初值的数据成员。

final进行赋值被强制在数据成员的定义处或者是每个构造器中用表达式对final进行赋值,保证了final数据成员在使用前总是被初始化。

12. final参数:将参数声明为final,意味着无法在方法中更改参数引用所指向的对象。

13. final方法:1)锁定方法,不会被重载,2)效率 

14. final类:禁止继承,final类中的所有方法都被隐含是final的,因为它们是不会被重载的。

优先使用组合,在必要时选择继承(需要向上转型)

 

 

 

posted @ 2013-02-20 22:27  Thriller1  Views(189)  Comments(0Edit  收藏  举报