2011-10-24 37 views
26

Làm cách nào để truy cập lớp bên ngoài 'super từ lớp bên trong?Truy cập lớp ngoài "siêu" từ lớp bên trong trong Java

Tôi đang ghi đè phương pháp để chạy trên một chuỗi khác. Từ một chủ đề nội tuyến, tôi cần phải gọi phương thức ban đầu nhưng tất nhiên chỉ cần gọi method() sẽ biến thành một đệ quy vô hạn.

Cụ thể, tôi đang mở rộng 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(); 
      [..] 
    } 
} 

nơi này mang lại cho tôi một NullPointerException Tôi không thể tìm thấy.

Cảm ơn.

Trả lời

71

Như thế này:

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(); 
    } 
} 

Các thử nghiệm trên, khi thực hiện, hiển thị:

Blah 
[email protected] 
Các vấn đề liên quan