2014-09-03 184 views
2

我所见过的所有关于Is-a和Has的讨论都是关于用户定义类型的例子。一个类可以和一个String有一个“Has-a”关系吗?

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

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

是的。这不是特别有用,但是是的。 – 2014-09-03 03:17:05

+0

是............... – 2014-09-04 07:24:37

回答

0

是的。字符串和您提到的其他用户定义类型都从Object类继承。所以从某种意义上说,它们是相似的。

1

在OOP的上下文中两个关系类型,聚合(HAS-A)和组合物(拥有-A)是类似的,但略有不同。

聚合是指包含的对象可以存在于它自己的容器对象之外。 现实生活中ex:汽车和引擎对象。发动机可以独立存在于汽车之外,因为汽车在第一个发生故障时可以获得不同的发动机等。

组成是何时容器控制/ 拥有包含对象的生命周期。那就是当容器不存在时,被包含的对象也没有意义存在。 现实生活中ex:House and Room objects。你不能只在房间里有一个房间,你需要在房子里有一个房间才有意义。当房子被摧毁时,你也会毁坏房间。

在你的具体的例子我要说的是,你有一个组成关系,因为s(所包含的对象)似乎是Flommer私人领域,它得到的值内联(由Flommer创建)。

如果你能想到一个“现实生活”的概念在Flommer之外是有意义的,并且可以表示为一个简单的string,那么你将有一个HAS-A关系。所以它取决于你想要建模的真实概念以及如何创建对象模型。在此之前,您有OWNS-A关系,即构图。

-1
In the above code, can it be said that Flommer has-a String ? 

,它是有过气的关系 - 所以,你可以用这个工具组成。

考虑一个例子,

学生,一个人

学生有-一个名字(比如字符串名称=“约翰”)

通过组合,你会得到学生的姓名(其中有has-a关系)OP的问题是在这里

回答继承(继承Flommer),你仍然得到了学生的姓名(中,你获得Flommer的整个状态和行为,但不在构图中)

组合和继承都可用于代码重用。

This发帖将有助于更好地理解概念

+0

与继承有关,你只能说'Flommer'是一个'Flimmer'。这个问题与's'变量的关系在哪里? – 2014-09-03 11:00:43

+0

@LiviuM。编辑我的帖子。我的意思是说你也可以通过继承来获得's'。顺便说一句,我回答了'是'too:) – 2014-09-03 13:24:20

+0

@Downvoter请告诉我马答的错误,以便我可以改善或纠正它 – 2014-09-05 07:46:24

相关问题