-6

一个类中的实例变量是另一个类中的对象!2类之间有什么关系。两者都在同一个包中。

4

1 回答 1

0

这两个类当然是相关的,即它们有一个Association。但是,他们关系的性质可能是AggregationComposition。给你一个例子,从而解释它与继承有何不同;考虑以下类:

  • Shape(基类;可以是抽象的)
  • Circle, Triangle,Square等(派生类)
  • Line, Colour(用于聚合组合的类)

任何派生类:Circle, Triangle, Square "IS-A" Shape也是如此。这是继承,其中子类像Circle extends Shape超类。所有公共受保护的属性(例如area)和行为(例如move())都可以被子类继承和访问。

现在,这些形状中的每一个都将由Line(s) 组成,并且将具有这些类的Colour实际实例,即这些类的实际实例将作为属性(属性)存在于形状类对象中。

这被称为“HAS-A”关系,因为一个Shape,比如说,一个Square has-a Colour和四个Line(s)。这种关系可以通过以下两种形式进一步观察:

  • 聚合(是一种定向关联)
    在这里,Shape子类和Colour有一个聚合。这种关系是多对一的,即一个形状只能有一种颜色,而一个或多个形状可以有相同的颜色。

  • 组合(是一种更强的聚合形式)
    在这里,Shape子类和Line(s) 具有一对多的组合。不同之处在于包含对象的生命周期取决于其容器。

例如,如果 aTriangle被销毁,它Line(s) 也会被销毁。另一方面,如果它被涂成红色,则相应的Colour对象仍然存在,因为作为多对一关系的一部分,它也可能被其他形状对象引用。

参考
Has-A 关系(维基百科)
组合优于继承(维基百科)
更喜欢组合而不是继承?(StackOverflow)
聚合 vs 组合 vs 继承 vs 关联 vs 依赖

于 2013-07-28T11:42:59.793 回答