2011-10-24 165 views
26

如何從內部類訪問外部類'super從Java的內部類訪問外部類「超級」

我重寫了一個方法,使其在不同的線程上運行。從一個內聯線程,我需要調用原始方法,但當然,調用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異常,我無法找到。

謝謝。

回答

71

像這樣:

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 
[email protected]