扩展内部 class 后访问外部 class 的方法

Access outer class's methods after extending inner class

我知道我可以从内部 class 访问外部 class 的方法。 喜欢下面的class:

class outer {

    void outerMethod() {}

    class inner {

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

我想知道如果扩展内部 class 怎么办?

我想做以下事情:

class newClass extends outer.inner {

    void innerMethod() {
        outerMethod();
    }
}

我希望能够从 newClass

访问 method()

非静态实例 inner class 需要存在 outer class 实例,它将属于。
所以要编译 class newClass extends outer.inner { 你要么需要

  1. 使 inner class 静态,并删除 outer class 实例存在的要求(但这也会稍微限制你的 class)
  2. 或确保 inner 将属于某个 outer 实例,您可以通过在扩展此内部 class 的构造函数中调用 outerInstance.super() 来实现=41=]。

在选项 2 的情况下,可能最简单的解决方案是将 outer 的实例显式传递给您的 class,例如

class newClass extends outer.inner {

    private outer o;

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

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

现在您可以简单地在 outer class 的传递实例上调用您的 outerMethod()

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