gpt4 book ai didi

java - 从内部类访问扩展类的方法

转载 作者:行者123 更新时间:2023-12-01 17:01:39 25 4
gpt4 key购买 nike

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,它将是一个内部类。该内部类的任何实例都将具有对 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();

关于java - 从内部类访问扩展类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27339664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com