一个班级可以有一个" Has-a"与String的关系?

时间:2014-09-03 03:06:37

标签: oop aggregation composition

我所看到的关于Is-a和Has-a关系的所有讨论都是指用户定义类型的示例。

在下面的代码中,可以说Flommer有一个字符串吗?

class Flommer extends Flimmer {
    String s = "hey";
}

3 个答案:

答案 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帖子将有助于更好地理解这个概念