与Collection对象具有has关系的类是否与Collection的元素有关系?

时间:2016-05-07 13:30:55

标签: java composition open-closed-principle

我正在攻读Java 8 Programmer II认证,并且我正在研究关系类可以拥有的。我理解组合,但我想知道在集合的元素和类的类变量之间是否存在关系。例如,请考虑以下代码:

public class A {
    static ArrayList<String> strings = new ArrayList<String>();

    public A() {
        strings.add("foo");
    }
}

我们是否说字符串的String元素与A类有关系?

4 个答案:

答案 0 :(得分:1)

我会说是的。这里的集合几乎无关紧要,更多的只是类和字符串之间“has-a”关系的实现细节而不是其他任何东西。至于这是一个全班关系而不是每个实例的关系这一事实,只要你知道这是好的,那就是你的意图。

答案 1 :(得分:1)

首先,如果类A具有简单的String字段,我们应该明确表AString类是否存在关联:

public class A {
    static String aString;

    public A() {
       aString = "foo";
    }
}

......我想是的!这将是“有一个”的实现 - A有一个String

在您的示例中,有一组String s。我们也可以说类A有一个(很多;)String ...你可以想象类AString个对象有很多关系; class A将它们聚合在一起。这类似于众所周知的构图示例“car”有'wheel'

你也可以说这是单向的一对多关系(单向关系,因为这种关系只有一方知道另一方)。

答案 2 :(得分:0)

是的,它是"aggregation"或组合,具体取决于相关对象的生命周期。另请参阅https://softwareengineering.stackexchange.com/questions/61376/aggregation-vs-composition

答案 3 :(得分:0)

Has-a和is-a是直观的概念。它们不是编译器会检查的规则。它是一种用于有效地与他人沟通并用于做出设计决策的共享词汇表。那么A&#34;有&#34;那些字符串?是的,但你很少说你宁可说A级有一系列字符串。一个简单的比喻就是当你背着书包时,你不会立刻说你带着书,而你最有可能说你带着一个装满书的书包(字符串集合)。