`
凌紫冥
  • 浏览: 24588 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java编程思想第四版——第二十一天

    博客分类:
  • Java
阅读更多
2012-05-04
163-170/913

Java编程思想第四版——第二十一天

7.3 代理
Java没有提供对代理的直接支持,这是继承与组合之间的中庸之道。讲一个成员对象置于所要构造的类中(就像组合),但与此同时在新类中暴露了该成员对象的所有方法(就像继承)。

7.4 结合使用组合和继承
同时使用组合和继承是很常见的事。
虽然编译器强制初始化基类,并且要求在构造器起始处就要这么做,但是它并不监督必须将成员对象也初始化,这一点需要自己时刻注意。

7.4.1 确保正确清理
注意对基类清理方法和成员对象清理方法的调用顺序,以防某个子对象依赖于另一个子对象情形的发生。一般而言,所采用的形式应该与C++编译器在其析构函数上所施加的形式相同:首先,执行类的所有特定的清理动作,其顺序同生成顺序相反(通常这就要求基类元素仍旧存活),然后,调用基类的清理方法。

许多情况下,清理并不是问题,仅需让垃圾回收器完成该动作就行。但当必须亲自处理清理时,就得多做努力并多加小心。
最好的办法是除了内存以外,不能依赖垃圾回收器去做任何事,如果需要进行清理,最好是编写自己的清理方法,但不要使用finalize()。

7.4.2 名称屏蔽
如果java的基类拥有某个已被多次重载的方法名称,那么在导出类中重新定义该方法名称并不会屏蔽其在基类中的任何版本(这一点与C++不同)。因此,无论是在该层或者它的基类中对方法进行定义,重载机制都可以正常工作。
Java SE5新增加了@Override注解,不是关键字,但是可以把它当作关键字使用。当想要覆写某个方法时,可以选择添加这个注解,在不留心重载而非覆写了该方法时,编译器就会生成一条错误消息。
@Override注解可以防止在不想重载时而意外地进行了重载。
还是对这个标记有点迷糊。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics