在面向对象设计、面向对象程序设计等领域,
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测试。
参考:
- Is-a 维基百科
- “Head First Java”(中文版)
网友评论