拆构函数是C++里面的概念,它是一种能在清理对象的时候自动调用的方法,Java里面没有这种概念。原因可能是Java处理这类问题的时候,只是简单地把对象放到一边,然后留给垃圾回收器去处理,它不会去主动地进行清理。
大多数情况下,这种做法也很不错,但是有时候,会遇到一些特殊的类,在清理它们的对象的时候会需要进行一些额外的操作。你既不知道垃圾回收器什么时候启动,也不知道它会不会启动。所以如果要进行清理,你就必须明确地写一个专门干这件事的方法,然后告诉客户程序员们去调用这个方法。
系统里的所有东西都是shape(而shape本身又是object,因为它是隐含地继承自根类)。各个类在覆写shape的dispose()方法的时候,除了用super调用基类的dispose()之外,还要完成它自己的清理活动。实际上,对象的生命周期内调用的任何方法,都可能会造成一些需要进行清理的后果。每个类都有它自己的,用来恢复内存以外的资源状态dispose()方法。
注意,在清理方法中,如果子对象之间有依赖关系,那么你还要留意其基类和成员对象的清理方法的调用顺序。总之,这个顺序同C++的编译器要求的拆构函数的执行顺序是一样的,先按照创建对象的相反顺序进行类的清理,然后调用基类的清理方法。