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

时间:2015-07-09 19:34:48

标签: java class extend

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

class outer {

    void outerMethod() {}

    class inner {

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

我想知道如果我扩展内部类怎么能这样做?

我想做以下事情:

class newClass extends outer.inner {

    void innerMethod() {
        outerMethod();
    }
}

我希望能够从method()

访问newClass

1 个答案:

答案 0 :(得分:2)

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

  1. inner类设为静态,并删除outer类实例存在的要求(但这也会限制您的课程)
  2. 或确保inner属于某个outer实例,您可以通过在类的构造函数中调用outerInstance.super()来扩展此内部类。
  3. 对于选项2,可能最简单的解决方案是将outer的实例显式传递给您的类,如

    class newClass extends outer.inner {
    
        private outer o;
    
        public newClass(outer outerInstance) {
            outerInstance.super();
            this.o = outerInstance;
        }
    
        void innerMethod() {
            o.outerMethod();
        }
    }
    

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

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