【发布时间】:2013-05-03 00:49:36
【问题描述】:
我知道 Java 中静态嵌套类和内部类之间的区别。 我说的是内部阶级。 我也知道我们可以使用“OuterClass.this”从内部类中获取外部类。
和目录一样,有两种导航方式:绝对导航和相对导航。 例如:“/aaa/bbb/ccc/ddd”,如果我在文件夹“ccc”中并想引用“bbb”,我们可以:“cd /aaa/bbb”或“cd ..”。
现在介绍 Java 内部类。
class AAA{
BBB b = new BBB();
class BBB{
CCC c = new CCC();
//CCC c = new CCC(b);
class CCC{
//SECOND VERSION
//BBB parent = null
//CCC(BBB parent_){
// parent = parent_;
//}
DDD d = new DDD();
BBB GetParent(){
return AAA.this.b; //I know this will work
//or return parent; if using the SECOND VERSION
}
class DDD{
}
}
}
}
我提供了两个版本: AAA.this.b 和 引入一个成员变量“parent”,赋值给构造函数的参数。
我的问题: 如果我不引入成员变量,我可以使用相对方式从内部类获取其直接父级吗? (如 cd ..)
【问题讨论】:
-
AAA.this.b 是怎样的“父母”?不清楚你在问什么?两个版本都返回 BBB 类的任意实例,而不是使用 GetParent 方法包含 DDD 对象的实例。所以第三个版本似乎是'return new BBB();`
-
谢谢。但我不能同意。我认为这种情况很清楚。如果您有一个 AAA 实例,说“a”,那么您将有:a、a.b、a.b.c、a.b.c.d;您将按嵌套顺序组装 4 个实例。
-
BBB.this 不起作用吗?
-
显然,您已经有一种方法可以在 getParent() 类中访问父级实例。这就是这样做的方法。它实际上让我想知道你在问什么。为什么 getParent() 不适合?也可以通过
java.lang.Class方法获取内部类的父类,getDeclaringClass() -
"BBB.this" 是我想要的答案。 getParent 是我通常在 C++ 中使用的方式;由于 Java 有“BBB.this”,我不必为内部类声明的每一级实现类似“getParent”的函数(也不必定义额外的“m_Parent”变量)。感谢您的所有努力和帮助!
标签: java inner-classes