is-a 和 has-a的区别
is-a 和 has-a的区别
彼得雷 发表于2年前
is-a 和 has-a的区别
  • 发表于 2年前
  • 阅读 91
  • 收藏 0
  • 点赞 0
  • 评论 0

    is a”代表的是类之间的继承关系,比如PC机是计算机,工作站也是计算机。PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。因此在用 Java语言实现时,应该将PC机和工作站定义成两种类,均继承计算机类。

    “has a”代表的是对象和它的成员的从属关系。同一种类的对象,通过它们的属性的不同值来区别。比如一台PC机的操作系统是Windows,另一台PC机的操作系统是Linux。操作系统是PC机的一个成员变量,根据这一成员变量的不同值,可以区分不同的PC机对象。
    再比如张三和李四都是人,但他们的名字不一样,可以以此区分这两个具体的人。名字应该作为人的成员变量。如果将名字叫张三的人和名字叫李四的人分别定义成两个类,均继承这个类,显然是不合理的。

    is a 的意思是如果AB,那么B就是A的基类。比如:等边三角形是使是三角形,那么,三角形就是等边三角形的基类。
    has a
是如果A中有B,那么,B就是A的组成部分 

    如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。
    如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类,而不是从电脑类继承。

标签: is-a has-a
共有 人打赏支持
粉丝 3
博文 27
码字总数 70881
×
彼得雷
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: