面向对象中的IS A和HAS A 问题

“is a”代表的是类之间的继承关系,比如PC机是计算机,工作站也是计算机。PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性。


在C#开发时,应将pc与工作站设计成不同的类,然后继承于计算机这个类。

再比如,苹果不水果中的一种,桃子也是水果中的一种,区别是它们属于不同的水果类别,但都继承了水果的共同特性,都有水果名称,重量,形状,色彩等。

在实际开发中,需要把这两种不同的水果设计成不同的类,分别继承于水果这个类。苹果与桃子都是水果的一个具体实例,水果只是一个抽象类。


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

原文地址:https://www.cnblogs.com/Leung/p/1250033.html