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(马“有”缰绳) 。
其代码形式如下:
在前面的代码中,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类。
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类。
相关文章推荐
- SCJP认证 第二章 面向对象 2.4.2 重载方法(2)
- SCJP认证 第二章 面向对象 2.1 封装
- SCJP认证 第二章2.2继承、IS-A、HAS (2.1.0 继承)
- SCJP认证 第二章 面向对象 2.4.2重载方法(1)
- SCJP认证 第二章-面向对象 2.2.1 IS-A关系
- C++包含关系实现has-a(面向对象)例子
- C++包含关系实现has-a(面向对象)例子
- grails 设置一对多(hasMany belongsTo)级联关系
- SCJP认证复习~3
- 【.NET Core项目实战-统一认证平台】第二章网关篇-重构Ocelot来满足需求
- java(未检出20130729) String、StringBuffer、类与类之间关系:依赖关系Use-a、.聚合关系has-a、组合继承(“is-a”)、抽象类、接口
- 面向对象的三大特性、七大原则、类与类间的关系
- Hibernate——以面向对象的思维操作关系数据库(一)
- JAVA技术内幕_什么是is-a和has-a关系
- SCJP认证套题解析之二
- 面向对象的关系数据库设计
- 黑马程序员-java学习之面向对象(类与对象的关系)
- C++ 面向对象(三)—— 类之间的关系
- java 第二章 理解面向对象
- 第二章(5)自引用关系建模