处理教材:Reusing Classes of "Thinking in Java"

来源:互联网 发布:淘宝买家具注意事项 编辑:程序博客网 时间:2024/05/06 12:24

——关于以TIJ为课本的Java教与学的方法

继承和组合,是复用一个类的两种常见方式,在第二章Everything is an object曾经谈到,一般的设计中会优先考虑使用组合来实现复用。然而,什么时候会考虑仍然使用继承呢?这就关系到java对继承特性的支持方式了,本章和下一章polymorphism主要就是讨论在怎样的情况下以及如何善用继承。

本章的第一节,就饶有兴味地举例表明了组合的使用,顺便谈到了toString()方法这个小知识。我最佩服Eckel的一点,就是他能够把各种实用而有趣的小知识点穿插进他的主线中,有时候可能主线知识点你已经熟悉,比如第一节的主线是组合,早已经使用了多次,但他会在主线的例子中穿插toString()方法和创建对象的四种方式,尤其是lazy initialization,完全是一个设计的话题,闪烁着优良设计的智慧,这样,使得每一个例子读起来都非常享受,不会浪费你一点点时间。

接着,就介绍了extends关键词,作者指出,实际上,你一直在不知不觉地使用继承,因为你的每一个类都是默认从Object继承的,只是你给它增添了新的方法而已。接下来的一个例子包含了“main()函数的设计目的:每个类自带的测试函数”、“显式地调用其他类的main函数”、继承的一般原则(字段私有、可继承的方法公有)、在进行方法覆盖时用super关键字调用父类版本的设计技巧等等。

然后,就是初始化了,实际上,一个子类在构造时会默认地调用父类构造函数。然后,就提到了一种设计模式,即避免继承的设计模式,即Adapter设计模式,在书中称为Delegation

接下来的一段非常精彩,讲了对于垃圾收集的一种仿造模式,即在继承体系中增加expose()函数,然后使用try..catch...finally语句块,然后,在每个子类的dispose()上都在最后执行父类的dispose()函数,这样就可以自主申请和释放对象所使用的资源了。

最后,值得一提的还有Eckel对于何时使用继承的精彩观点,他提出,只有在需要使用父类的引用来操作子类对象的时候,才需要考虑继承,否则,我们应当使用组合。

原创粉丝点击