Java 访问外部类';扩展内部类后的s方法

Java 访问外部类';扩展内部类后的s方法,java,class,extend,Java,Class,Extend,我知道我可以从内部类访问外部类的方法。 像下面的班级: class outer { void outerMethod() {} class inner { void innerMethod() { outerMethod(); } } } 我想知道,如果我扩展了内部类,我该怎么做 我想做以下工作: class newClass extends outer.inner { void innerMeth

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

class outer {

    void outerMethod() {}

    class inner {

        void innerMethod() {
            outerMethod();
        }
    }
}
我想知道,如果我扩展了内部类,我该怎么做

我想做以下工作:

class newClass extends outer.inner {

    void innerMethod() {
        outerMethod();
    }
}

我希望能够从
newClass
访问
method()
,非静态
内部
类的实例需要存在它将属于的
外部
类实例。
因此,要使
类newClass扩展outer.inner{
编译,您需要

  • 内部
    类设置为静态,并删除
    外部
    类实例存在的要求(但这也会稍微限制您的类)
  • 或者确保
    internal
    将属于某个
    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
    具有适当的可见性时才有可能。因此,尽管
    internal
    能够使用其外部类的任何方法,您的
    newClass
    可能无法访问它。

    抱歉,我现在更正了它。您想要
    newClass
    t吗o是否包含在类
    外部
    中?我认为所有属性和特权都是通过继承传递的,但内部类继承显然不是这样。不,特权不是继承的,这就是为什么扩展内部类很少是好的决定。