令人困惑的Java类概念

时间:2011-09-28 10:08:22

标签: java

java和一个概念的新手让我很困惑。

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

class Foo {
int age;
Foo someName;
}

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

4 个答案:

答案 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()来创建对象。