从内部类调用外部类函数

146

我在Java中实现了一个嵌套类,我需要从内部类调用外部类的方法。

class Outer {
    void show() {
        System.out.println("outter show");
    }

    class Inner{
        void show() {
            System.out.println("inner show");
        }
    }
}

我如何调用Outer类中的show方法?


你的内部类是否持有外部类的实例? - Eric
15
在Java中,非静态内部类的实例始终持有外部类的一个实例。 - newacct
@Eric:在非静态Java内部类中,这总是成立的! - Arne Burmeister
糟糕,我搞混了。我们可以假设你的“外部”类持有“内部”类的一个实例吗? - Eric
@Eric: 我认为你现在更加混淆了。不,你不能假设外部类持有内部类的实例;但这与问题无关。你的第一个问题(内部类是否持有外部类的实例)是相关的问题;但答案始终是肯定的。 - newacct
2个回答

250

您需要在调用时加上外部类的前缀:

Outer.this.show();

3
好的。我对此有一个跟进问题。如果我有一个内部类实例,如何从完全不同的位置调用外部类中的方法?例如,如果外部类有一个公共方法getValue(),那么myInner.getValue()将无法工作,myInner.Outer.getValue()也不起作用。我知道可以通过在Inner中拥有一个getOwner方法来完成这个操作,然后调用它...但我需要那个方法吗?谢谢。 - mjs
如果outer是一个接口,那么如何从内部类调用抽象方法? - Kanagavelu Sugumar

0
这应该可以解决问题:
Outer.Inner obj = new Outer().new Inner();
obj.show();

3
他在询问Outer类的show()方法,该调用将会触发Inner类的show()方法。 - Ava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接