SCJP认证 第二章 面向对象 2.2.2 HAS-A关系

HAS-A关系基于用法而不是继承。换句话说,如果类A中的代码具有对垒B实例的引用,则"类A HAS-A 类B"。例如,可以说:

   A Horse IS-A Animal(马“是”一种动物) 。

   A Horse HAS-A Halter(马“有”缰绳) 。

其代码形式如下:

  在前面的代码中,Horse类具有一个Halter类型的实例变量,因此可以认为“Horse HAS-A Halter” 。换句话说,Horse有一个对Halter的引用。Horse代码能够使用这个Halter引用调用Halter上的方法,并得到Halter操作,而Horse类本身不必有与Halter相关的代码(方法)。下图说明了Horse和Halter之间的HAS-A关系。

  HAS-A关系使你能够按照良好的OO实践射击类,而不必使用单独的类来完成大量的不同操作。类(以及从这些类示例化的对象) 应该是专用的。正如我们的朋友Andrew所言:“专用类实际上有助于减少错误。”类的专用化程度越高,在其他应用程序中就越可能复用这个类。

  如果将与Halter相关的所有代码都直接放入Horse类中,则最终会导致在Cow类、UnpaidIntern类以及所有其他可能需要Halter行为的类中都会有重复的代码。将Halter代码保持在一个单独的、专用的Halter类中,就有机会在多个应用程序中复用Halter类。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章