java与集合对象有关系的类是否与集合的元素有关系?
我正在学习Java8程序员II认证,我正在复习类可以拥有的关系。我理解组合,但我想知道作为类的类变量的集合的元素与该类之间是否存在关系。例如,考虑这个代码:
public class A {
static ArrayList<String> strings = new ArrayList<String>();
public A() {
strings.add("foo");
}
}
我们是否说字符串的字符串元素与类a有关系
# 1 楼答案
是的,它是一个"aggregation"或一个组合,取决于相关对象的生存期。另见https://softwareengineering.stackexchange.com/questions/61376/aggregation-vs-composition
# 2 楼答案
Has-a和is-a是直观的概念。它们不是编译器要检查的规则。这是一个共享词汇,用于有效地与他人沟通,并用于做出设计决策。那么A级有这些字符串吗?是的,但是你很少会说,你会说A类有一个字符串集合。一个简单的类比是,当你提着一个书包时,你不会马上说你在提书,而很可能会说你提着一个装满书的书包(收集的字符串)
# 3 楼答案
我会说是的。这个集合在这里几乎无关紧要,它只是类和字符串之间“has-a”关系的一个实现细节,而不是其他任何东西。至于这是一个类范围的关系,而不是每个实例的关系,好吧,只要你意识到这是你的意图,那就好了
# 4 楼答案
首先,我们应该弄清楚,如果类
A
有简单的String
字段,那么类A
和String
是否存在关系:。。。我认为是这样!那就是“has-a”关系——
A
has-aString
在你的例子中有一个
String
的集合。我们也可以说类A
有-a(很多;)String
s。。。可以想象类A
与String
对象有很多关系;类A
在集合中聚合它们。这类似于众所周知的构图示例“汽车”有“轮子”你也可以说这是单向的一对多关系(单向的,因为这种关系只有一方知道另一方)