java和一个概念的新手让我很困惑。
作为一个c ++程序员,当我们声明一个类时,我们不能拥有一个具有相同类对象的属性,比如说我们有一个类名Foo,如下所示
class Foo {
int age;
Foo someName;
}
上面的代码会给出错误。虽然在java中我可以做到。它背后有特殊原因吗?它是如何发生的。任何好的阅读都会有所帮助。
答案 0 :(得分:12)
当您在Java中编写Foo someName
时,您正在为Foo
类型的对象创建引用。这类似于在C ++中编写Foo& someName
,其中是允许的。
C ++中不允许的是,类Foo
中的成员具有Foo
类型的成员(即不是Foo&
或Foo*
)。如果你考虑一下,这个结构可能没有意义,因为它需要sizeof(Foo)
无限大。这个 - 不允许 - C ++构造没有直接的Java等价物。
答案 1 :(得分:1)
在Java中声明Foo someName
时,someName实际上是对类Foo对象的引用。
因此,引用相同类型的对象的属性没有问题。
这与您在C ++中拥有Foo& someName
的方式类似。
答案 2 :(得分:1)
Java将对象存储为引用。 C ++没有。其中有区别。
使用Java,它不需要知道为Foo对象保留多少空间。但是在C ++中编译器需要。所以C ++有一个不可能完成的任务。
答案 3 :(得分:1)
这是因为C ++和Java之间的重要性:在C ++中,上面的Foo
将是一个对象;在Java Foo
上面只是一个引用 - 而不是一个对象。 (您必须编写Foo someref = new Foo()
来创建对象。