我想知道如何在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中工作的。 (我知道组合和聚合的含义) };
答案 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;
}
//...
}