我想知道如何在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中是如何工作的吗。(我知道组合和聚合是什么意思)};
Java本身根本没有区分组合和聚合。您不能在Java类型系统中表达引用所有权的概念——如果您明确需要表达所有权,则必须用其他方式来表示(通常只是通过构造一个新对象来存储在类的实例中)。
由于Java有一个GC,所以根本不需要表达内存的所有权;内存由GC单独拥有和管理。当然,其他资源的情况并非如此,在这里您可能仍然希望表达所有权。
在Java中,对象仅由指针引用。这意味着A
类型的字段实际上是对A
对象的引用。这也意味着该字段将始终以空指针开始,并且必须显式地将其分配给new A()
或其他类型。
编辑:
class B {
A a;
B(A a) {
this.a = a;
}
B() {
this(new A());
}
}
我认为这是用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;
}
//...
}
源