我是Java新手。我是一名C ++程序员,正在阅读一些Java代码。我有这个类定义:
class Container {
long ID;
class Contained {
void foo(){
long parentID = ID;
}
}
}
我看到Contained可以通过名称访问Container类的任何成员。
我有一个问题:
这里发生了什么?在C ++中,这些类是不相关的。但在Java中,似乎包含的类对象似乎隐含地绑定到父类对象的实例。
由于 和Manish
PS:对不起,我知道我可以拿一本关于Java的书,但我希望有人可以帮助我。答案 0 :(得分:3)
在Java中,这些称为嵌套类。有几种类型的嵌套类具有不同的语义。有http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html的信息。
在您的示例中,它是一个内部类,因此它的实例在外部类的实例中存在。
答案 1 :(得分:3)
由于Contained
类未声明为static
,这意味着它只能存在于Container
类的实例中,因此可以访问所有方法和变量Container
。
如果您已将Contained
声明为static
,那么它会模仿您更习惯的C ++用法 - 也就是说,您可以拥有嵌套类的实例而无需实例Container
。
有关详细信息,请参阅Java inner class and static nested class。
答案 2 :(得分:0)
这是一个嵌套类。它的生命周期与父类相关联。阅读here以获得完全理解。