如何在java中编写组合和聚合

时间:2012-03-25 17:21:51

标签: java c++ oop

我想知道如何在java中识别组合和聚合代码。我有C ++代码,但我不懂如何用java编写。

组合物

class A {};
class B { A composited_A; };

通过指针聚合

class A {};
class B
{
A* pointer_to_A;
B(A anA){ 
pointer_to_A = &anA;
}

任何人都可以告诉我两者是如何在JAVA中工作的。 (我知道组合和聚合的含义)     };

3 个答案:

答案 0 :(得分:8)

Java本身根本不区分组合和聚合。您无法在Java类型系统中表达引用所有权的想法 - 如果您明确需要表达所有权,则必须使用其他方式表示(通常只需构造一个新对象以存储在类的实例中)。

由于Java具有GC,因此根本不需要表达对内存的所有权。内存仅由GC拥有和管理。当然,对于其他资源也是如此,在这里你可能仍然希望表达所有权。

答案 1 :(得分:1)

在Java中,对象仅由指针引用。这意味着A类型的字段实际上是对A对象的引用。它还意味着该字段将始终作为空指针启动,您必须将其显式分配给new A()或其他任何内容。

修改

class B {
   A a;

   B(A a) {
      this.a = a;
   }

   B() {
      this(new A());
   }
}

答案 2 :(得分:-1)

我认为这是用Java代码表达组合和聚合的最佳方式。

<强>组合物

public class Person  
{  
    private final Name name;  

    public Person (String fName, String lName)  
    {  
        name = new Name(fName, lName);  
    }  

    //...  
}  

<强>聚合

public class Person  
{  
    private Costume currentClothes;  

    public void setClothes(Costume clothes)  
    {  
        currentClothes = clothes;  
    }  

    //...  
}  

Source