首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中,复合对象不能包含其他对象。这意味着什么?

在java中,复合对象不能包含其他对象。这意味着什么?
EN

Stack Overflow用户
提问于 2012-02-25 18:05:20
回答 4查看 3.6K关注 0票数 3

我对以下的说法感到困惑。有人能帮我理解下面的陈述吗?

在java中,复合对象不能包含其他对象。它只能具有对其组成对象的引用。组成对象可以在对象之间共享,它们的生存期可以独立于复合对象的生存期。

EN

回答 4

Stack Overflow用户

发布于 2012-02-25 18:09:15

这意味着在Java中,与C++等语言不同,对象不能包含其他对象,只能引用它们。

这意味着合成和聚合的概念没有实际的区别。在复合中,对象的生存期限制在包含对象的生存期内,通常包含对象创建包含的对象。总的来说,还有更多的自由。

票数 4
EN

Stack Overflow用户

发布于 2012-02-25 18:07:55

考虑一下这样的事情:

代码语言:javascript
复制
class Foo {
}

class Bar {
    Foo my_foo = new Foo();
}

my_foo是对Foo对象的引用,它不是对象本身。Foo对象本身并不直接绑定到“封闭”Bar对象。

票数 3
EN

Stack Overflow用户

发布于 2012-02-25 18:08:13

Java中的对象类型变量是指向被分配并在堆上活动的对象的引用。

您需要理解这种设计选择的后果:这意味着如果堆上的对象被修改,那么引用它的所有对象都会看到这种更改。

因此,如果出现这种情况,创建地址引用对象的代码可以通过修改地址来更改Person的私有状态:

代码语言:javascript
复制
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.
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9446569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档