您的位置:首页 > 其它

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

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

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

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

其代码形式如下:

class Animal{}
class Horse extends Animal{
private Halter myHalter;
}


在前面的代码中,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类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: