我所看到的关于Is-a和Has-a关系的所有讨论都是指用户定义类型的示例。
在下面的代码中,可以说Flommer有一个字符串吗?
class Flommer extends Flimmer {
String s = "hey";
}
答案 0 :(得分:1)
在OOP的背景下,两种关系类型聚合(HAS-A)和组合(OWNS-A)相似但略有不同。
聚合是指包含的对象可以存在于容器对象外部。 现实生活 :Car和Engine对象。引擎可以独立存在于汽车之外,因为当第一个引擎破坏时,汽车可能会获得不同的引擎。
组合是指容器控制/ 拥有所包含对象的生命周期。也就是说,当容器不存在时,所包含的对象也没有意义存在。 真实生活 :House和Room对象。你不能在现场独自拥有一个房间,你需要把它放在房子里才有意义。当一所房子被摧毁时,你也会摧毁房间。
在您的具体示例中,我会说您有一个组合关系,因为s
(包含的对象)似乎是Flommer
的私有字段,它得到了内联值(由Flommer
创建)。
如果你能想到一个真实的生活"在Flommer'之外存在的有意义的概念。并且可以表示为简单的string
,那么您将拥有HAS-A关系。因此,它取决于您尝试建模的真实概念以及如何创建对象模型。在此之前,你有一个OWNS-A关系即组合。
答案 1 :(得分:0)
是。您提到的字符串和其他用户定义的类型都从Object类继承。所以从某种意义上说,它们是相似的。
答案 2 :(得分:-1)
In the above code, can it be said that Flommer has-a String ?
是,它具有Has-a关系 - 所以你可以用它实现组合。
考虑一个例子,
学生是一个人
学生有一个名字(比如String name =“John”)
通过撰写,您将获得学生的姓名(具有has-a
关系)此处已回答OP问题
通过继承(继承Flommer
),您仍然可以获得学生的名称(您可以在其中获取Flommer
的整个状态和行为,但不会在撰写中获取
组合和继承都可以用于代码重用。
This帖子将有助于更好地理解这个概念