令人困惑的Java类概念

S. *_*lik 2 java

java和一个新概念让我很困惑.

作为一个c ++程序员,当我们声明一个类时,我们不能拥有一个具有相同类对象的属性,比如说我们有一个类名Foo如下

class Foo {
int age;
Foo someName;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码会给出错误.虽然在java中我可以做到.它背后有特殊原因吗?它是如何发生的.任何好的阅读都会有所帮助.

NPE*_*NPE 12

当您Foo someName使用Java 编写时,您将创建对类型对象的引用Foo.这类似于Foo& someName用C++ 编写,这允许的.

C++中不允许的是类Foo具有类型的成员Foo(即不是Foo&Foo*).如果你考虑一下,这个结构不可能有意义,因为它需要sizeof(Foo)无限大.这个 - 不允许 - C++构造没有直接的Java等价物.