Is-a & Has-a

在面向对象设计、面向对象程序设计等领域,Is-a描述的是类的父子继承关系。

当一个类S继承另外一个类F时,我们一般会说这是子类S继承父类F,或说类F是类S的父类。换句话说即为

S is a F .

S被包含在F内,或说F包含S。更为一般得说,概念体S物是概念体F物的特殊化,而概念体S物是概念体F物的一般化。

举例:

三角形是一个多边形;外科医生是一个医生;苹果是一个水果······

那如果说

黑板是一个教室。

显然,黑板怎么可能是教室呢?这明显不满足‘Is-a’关系。但是退一步思考,黑板和教室的确是有关联的,这点是不可否认的。只是它们之间的关系并非‘Is-a’,而是‘Has-a’。
如果说

教室有一个黑板。

这样就更加符合逻辑了,在面向对象程序设计中,这表示教室带有黑板的实例变量。也就是说教室会有一个黑板的引用,但是教室并没有继承黑板。


Summary:

在实际面向对象编程过程中,如果想知道某物是否应该继承另一物时,就可以使用‘Is-a’测试来检验。

Is-a测试适用于在继承层次的任何地方。如果你的继承层次树设计得很好,那么所有的子类都应该通过任何一个上层父类的Is-a测试。

参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,759评论 18 399
  • 前几日看到一个小故事,一个小男孩和爸爸一起到沙滩上玩,发现由于某种原因,上百条小鱼搁浅在沙滩上,正奋力挣扎,尽力摆...
    王学慧阅读 135评论 0 0
  • 上一份工作的时候,同事与经理不和。 有一次,同事的工作上出现是一个很低级的错误,被经理抓住了。经理在会议上点名批评...
    顾尘埃阅读 123评论 0 5
  • # 一个简单直观的iOS 图表库。
    这是健阅读 363评论 0 0
  • 很多80后在为明天奋斗着,有的人功成名就,有的人愁眉苦脸,90后的许多人有的已经身价上亿,有的却还在默默的上学,这...
    e小琪琪阅读 732评论 0 0