我对以下的说法感到困惑。有人能帮我理解下面的陈述吗?
在java中,复合对象不能包含其他对象。它只能具有对其组成对象的引用。组成对象可以在对象之间共享,它们的生存期可以独立于复合对象的生存期。
发布于 2012-02-25 18:09:15
这意味着在Java中,与C++等语言不同,对象不能包含其他对象,只能引用它们。
这意味着合成和聚合的概念没有实际的区别。在复合中,对象的生存期限制在包含对象的生存期内,通常包含对象创建包含的对象。总的来说,还有更多的自由。
发布于 2012-02-25 18:07:55
考虑一下这样的事情:
class Foo {
}
class Bar {
Foo my_foo = new Foo();
}my_foo是对Foo对象的引用,它不是对象本身。Foo对象本身并不直接绑定到“封闭”Bar对象。
发布于 2012-02-25 18:08:13
Java中的对象类型变量是指向被分配并在堆上活动的对象的引用。
您需要理解这种设计选择的后果:这意味着如果堆上的对象被修改,那么引用它的所有对象都会看到这种更改。
因此,如果出现这种情况,创建地址引用对象的代码可以通过修改地址来更改Person的私有状态:
class Person {
private String name; // Strings are immutable; that is important
private Address address; // Address as written below is mutable
public Person(String n, Address a) {
this.name = n;
this.address = a;
}
}
class Address {
private String street;
private String city;
private String stateOrProvince;
private String postalCode;
public Address(String street, String city, String stateOrProvince, String postalCode) {
this.street = street;
this.city = city;
this.stateOrProvince = stateOrProvince;
this.postalCode = postalCode;
}
// add getters and setters, etc.
}https://stackoverflow.com/questions/9446569
复制相似问题