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

标签 java class extend

我知道我可以从内部类中访问外部类的方法。 就像下面的类一样:

class outer {

    void outerMethod() {}

    class inner {

        void innerMethod() {
            outerMethod();
        }
    }
}

我想知道如果我扩展内部类我该怎么做?

我想要执行以下操作:

class newClass extends outer.inner {

    void innerMethod() {
        outerMethod();
    }
}

我希望能够从 newClass 访问 method()

最佳答案

非静态inner类的实例需要存在它所属的outer类实例。
因此,要使 class newClass extends external.inner { 编译,您需要

  1. 使 inner 类静态,并删除 outer 类实例存在的要求(但这也会对您的类产生一些限制)
  2. 或者确保 inner 属于某个 outer 实例,您可以通过在构造函数中调用 outerInstance.super() 来实现你的类扩展了这个内部类。

对于选项 2,最简单的解决方案可能是将 outer 的实例显式传递给您的类,例如

class newClass extends outer.inner {

    private outer o;

    public newClass(outer outerInstance) {
        outerInstance.super();
        this.o = outerInstance;
    }

    void innerMethod() {
        o.outerMethod();
    }
}

现在您只需在传递的 outer 类实例上调用 outerMethod() 即可。

但请记住,只有当 outerMethod 对您的 newClass 具有适当的可见性时,才可以调用该方法。因此,尽管 inner 能够使用其外部类的任何方法,但您的 newClass 可能无法访问它。

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

相关文章:

java - 如何避免重复逻辑?

python-3.x - Intellij IDEA 导入类时出现问题, "cannot find reference"但代码仍然有效 - Python

android - 为什么要将扩展的 ImageView 转换为 ImageView?

java - 如何通过 JOptionPane 捕获的用户输入将数据添加到 JList?

java - Jersey SSE 客户端不工作

java - 将 int 值转换为字母值

C++ 函数指针参数和类继承自动转换

c# - 基本类命名和可见性问题

java - java 对象和转换

javascript - 即使构造函数调试显示为 true,使用 instanceof 检查 sequelize 错误也会导致 false