一个类中的实例变量是另一个类中的对象!2类之间有什么关系。两者都在同一个包中。
1 回答
这两个类当然是相关的,即它们有一个Association。但是,他们关系的性质可能是Aggregation或Composition。给你一个例子,从而解释它与继承有何不同;考虑以下类:
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 依赖