public class ABC extends XYZ
{
public static class InnerClass1
{
...
}
public static class InnerClass2
{
...
}
public static class InnerClass3
{
...
}
public static class InnerClass4
{
...
}
}
在上面的代码中,我无法访问内部类1,2,3和4中的XYZ类的方法。如何修改上述结构,以便内部类可以访问XYZ类中的方法?
提前致谢 !
最佳答案
public class ABC extends XYZ
{
public static class InnerClass1
{
...
}
InnerClass1
不是内部类。由于单词static
,它是一个嵌套类。如果没有
static
,它将是一个内部类。并且该内部类的任何实例都具有对ABC
(也是XYZ
)的隐藏引用。如果内部类调用了ABC
或XYZ
的任何实例方法,或引用了这些类中的任何实例变量,则它将使用该隐藏引用来调用实例方法或访问实例变量。但是,由于它是一个嵌套类,因此没有对
ABC
(或XYZ
)的隐藏引用。因此,如果您没有调用ABC
对象,则调用实例方法或引用实例变量将无法执行。 (但是,您仍然可以调用ABC
的静态方法,或引用静态变量。)我不确定解决方案是什么-它取决于您的需求。您可能无法调用的
XYZ
方法实际上并不需要XYZ
对象,因此这些方法应该是静态的。嵌套类也可能有一些用于访问实例方法的显式ABC
或XYZ
变量。如果您有要处理的对象,您仍然可以从嵌套类中调用实例方法:public static class NestedClass {
XYZ x;
void someMethod() {
x.instanceMethod(); // legal even if instanceMethod is non-static
}
}
另一种解决方案是删除单词
static
,以便InnerClass1
确实具有对ABC
的隐藏引用。这意味着在创建InnerClass1
实例时,需要一些ABC
对象供其引用。如果您在其他类中创建此语法,则语法将类似于ABC abcObject;
...
ABC.InnerClass1 newObject = abcObject.new InnerClass1();