一个类中的实例变量是另一个类中的对象!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 依赖