Thinking in java学习笔记(五)

第六章 复用类
1. 复用类的诀窍在于在不影响已有代码的基础上使用这些类。一种是组合(composition),另一种是继承(inheritance)。

2. toString()方法一般用于这种情况下:你想从一个对象得到它打印时的样子。在很多情况下,你需要重写这个函数。

3. 测试技巧:你可以为你的每一个类都创建一个main()方法。即使一个程序含有许多类,也只有命令行所调用的那个类的main()方法会被调用(只要这个main()是public,其所属的类是否为public则不用考虑)。这种在每个类中都设置一个main()方法的技术可使每个类的单元测试都变得简单易行。而且在你完成单元测试之后,也无需删除main(),你可以留待下次测试。

4. 在声明子类的过程中,我们知道一定会调用它的构造方法,在这个构造方法中一定会调用父类的构造方法,这是编译器强制规定,而且不可见。调用基类构造方法必须是你在子类构造方法中第一件要做的事情(假设咱们做错了,编译器会适时提醒)。

5. 如果你需要清除(dispose),最好是编写你自己的清除方法,但不要依赖finalize();请注意,在你的清除方法中,还必须注意对基类和成员对象的清除方法的调用顺序,以防止某个子对象依赖于另一个子对象的情形发生。形式最好和C++里的析构函数相同。

6. 在子类中仍然可重载父类的方法,注意这是重载,不是覆盖,因此并不会覆盖其在基类中的任何版本。

7. 组合和继承的区别?“is-a”是用继承关系来表达的,而“has-a”是用组合关系来表达的。

8. Protected:在实际项目项目中,你经常想要将某些事物尽可能的为这个世界隐藏起来,但仍然允许让子类的成员访问他们。就用户而言,它是private,但对于任何继承于此类的子类成员和同一包下的类来说,它却是可以访问的。

9. 我们要认识到程序开发是一种增量过程,犹如人的学习一样,这一点很重要。你可以尽其所能去分析,但当你开始执行一个项目时,你仍然无法知道所有的答案。如果你将项目看做是一种有机的进化的生命体去培养,而不是打算像盖摩天大楼一样快速见效,你就会获得更多的成功和更迅速的回馈。

10. 一定要慎用继承技术,在使用时一定要问一下自己:“我真的需要向上转型吗?”需要才必要,不需要就不要使用。

11. Final数据:对于基本类型,final使其数值保持不变;而对于对象引用,final使其引用保持不变,一旦引用被初始化指向一个对象,就无法改变它进行改变以指向另一个对象(然而,对象自身却是可以改变的)。

12. 空白final的使用,其实质是延后初始化,即使用前必须初始化;在类中时,它必须在构造方法中进行初始化,否则会造成编译错误。

13. Final在参数列表中使用:你可以读参数,但是无法修改参数。

14. 使用final方法的原因有两个:○1把方法锁定,以预防任何子类修改它的意义,这是出于设计的考虑:确保继承中方法行为保持不变,并且不会被重载;○2效率,如果将一个方法声明为final,就是同意编译器将针对该方法的所有调用都转为内嵌调用。

15. 将一个类声明为final的意思是说:该类永不需要任何改变,而且它不能够被子类继承。

你可能感兴趣的:(java,单元测试)