"has-a"和"is-a"是什么意思?

What do "has-a" and "is-a" mean?

本文关键字:意思 是什么 is-a has-a      更新时间:2023-10-16

有人能解释"HAS-A"answers"IS-A"在两个类之间的含义吗。

举个例子会很有帮助。

  • 汽车是一种交通工具
  • 汽车有方向盘

例如:

class SteeringWheel
{};
class Vehicle
{
    virtual void doStuff() = 0;
};
class Car: public Vehicle
{
    SteeringWheel  sWheel;
    virtual void doStuff();
};

在面向对象的世界中,类可以是东西,也可以包含内容。

例如,Queue类可以LinkedList类的子类(因为链表当然可以用于实现队列)。这是一种is-a关系。您可以对链表执行的所有操作,都应该能够对队列执行。

但是,队列类也可能包含其他信息,例如链表中的项目数(为了提高效率)。

为此,它还可以定义一个名为size的成员变量。这将是一个has-a关系——队列不是整数的子类,它只是包含一个整数。

这是两个类之间的两种常见关系形式。

HAS-A关系是指将类Y作为组件的类X,可能通过将类Y的实例作为属性放置在类X的每个对象中来表达。

IS-A关系指的是作为类Z的类W,可能是因为类W是类Z的子类,或者在其继承图中的某个地方有类Z。知道如何处理Z类实例的代码应该能够处理W类实例,而不需要更改代码。