在Java中从内部类访问外部类的"super"。

31

如何从内部类访问外部类的super?

我正在重写一个方法,以使其在不同的线程上运行。在内联线程中,我需要调用原始方法,但是仅仅调用method()会变成无限递归。

具体来说,我正在扩展BufferedReader:

public WaitingBufferedReader(InputStreamReader in, long waitingTime)
{
    [..]
    @Override
    public String readLine()
    {
        Thread t= new Thread(){
            public void run()
            {
                try { setMessage(WaitingBufferedReader.super.readLine()); } catch (IOException ex) { }
            }
         };

          t.start();
          [..]
    }
}

这段代码中有一个NullPointerException,但我找不到它的原因。

谢谢。

1个回答

79

像这样:

class Outer {
    class Inner {
        void myMethod() {
            // This will print "Blah", from the Outer class' toString() method
            System.out.println(Outer.this.toString());

            // This will call Object.toString() on the Outer class' instance
            // That's probably what you need
            System.out.println(Outer.super.toString());
        }
    }

    @Override
    public String toString() {
        return "Blah";
    }

    public static void main(String[] args) {
        new Outer().new Inner().myMethod();
    }
}

上述测试在执行时显示:

Blah
Outer@1e5e2c3

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