“is a” 和”has a“
2012-12-14 09:24
190 查看
刚开始接触这两个词之后,脑子里还真没有概念,下面是自己学习的内容
“is a”代表的是类之间的继承关系,比如PC机是计算机,工作站也是计算机。PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。因此在用 Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类。
“has a”代表的是对象和它的成员的从属关系。同一种类的对象,通过它们的属性的不同值来区别。比如一台PC机的操作系统是Windows,另一台PC机的操作系统是Linux。操作系统是PC机的一个成员变量,根据这一成员变量的不同值,可以区分不同的PC机对象。
再比如张三和李四都是人,但他们的名字不一样,可以以此区分这两个具体的人。名字应该作为人的成员变量。如果将名字叫“张三”的人和名字叫“李四”的人分别定义成两个类,均继承“人”这个类,显然是不合理的。
is a 的意识是如果A是B,那么B就是A的基类。比如:等边三角形是使是三角形,那么,三角形就是等边三角形的基类。
has a 是如果A中有B,那么,B就是A的组成部分
如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。
如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类,而不是从电脑类继承。
“is a”代表的是类之间的继承关系,比如PC机是计算机,工作站也是计算机。PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。因此在用 Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类。
“has a”代表的是对象和它的成员的从属关系。同一种类的对象,通过它们的属性的不同值来区别。比如一台PC机的操作系统是Windows,另一台PC机的操作系统是Linux。操作系统是PC机的一个成员变量,根据这一成员变量的不同值,可以区分不同的PC机对象。
再比如张三和李四都是人,但他们的名字不一样,可以以此区分这两个具体的人。名字应该作为人的成员变量。如果将名字叫“张三”的人和名字叫“李四”的人分别定义成两个类,均继承“人”这个类,显然是不合理的。
is a 的意识是如果A是B,那么B就是A的基类。比如:等边三角形是使是三角形,那么,三角形就是等边三角形的基类。
has a 是如果A中有B,那么,B就是A的组成部分
如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。
如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类,而不是从电脑类继承。
相关文章推荐
- 关键字is 、as,is a 、has a
- 继承(is a)还是聚合(has a)?
- Game Programming Gems 1中关于has a 和 is a的定义
- OOP 概念---has a ,is a
- 所谓has a 和 is a
- Java 继承和聚合/组合的关系以及 Is A,Has A
- IS A 和 HAS A的区别
- 「is a」&&「has a」
- Is a 和Has a之间关系
- is a 与 has a的区别
- has a 和 is a 的区别
- C++继承体系中Is a 关系 和has a关系
- “is a” 和”has a“
- C++继承体系中Is a 关系 和has a关系
- C++ 讲解:is A
- Waf is a Python-based framework for configuring, compiling and installing applications
- About TortoiseGit TortoiseGit is a Windows Shell Interface to Git and based on TortoiseSVN. It's ope
- 【SpringMVC】文件上传Expected MultipartHttpServletRequest: is a MultipartResolver错误解决【实测可用】
- multipartFile 出错:Expected MultipartHttpServletRequest: is a MultipartResolver configured?
- java辨析(3) :is a 和 like a