2011-08-16 15 views
19

से सुपर विधि कॉल करने मैं आधार वर्ग फू विधि स्पैम और वर्ग बार जो स्पैम ओवरराइड करता है के साथ की है।जावा: कैसे भीतरी यथा-स्थान वर्ग

public class Foo { 
    public void spam() { 
     // ... 
    } 
} 

public class Bar extends Foo { 
    @Override 
    public void spam() { 
     objectWhichRequireCallback(new Callback { 
      @Override 
      public void onCallback() { 
       super.spam(); 
      } 
     }); 
    } 
} 

इस कोड काम नहीं कर रहा है क्योंकि सुपरकॉलबैक, नहीं बार से संबंधित है: मैं कुछ कॉलबैक वस्तु की विधि में आधार वर्ग के स्पैम जिसमें जगह परिभाषित किया गया है कॉल करने की आवश्यकता कक्षा। क्या ऑब्जेक्ट परिभाषित ऑब्जेक्ट से सुपर विधि को कॉल करना संभव है?

+1

क्या आपने यह कोशिश की है। Foo.super.span()? – SJuan76

उत्तर

28
public class Bar extends Foo { 
    @Override 
    public void spam() { 
     objectWhichRequireCallback(new Callback { 
      @Override 
      public void onCallback() { 
       Bar.super.spam(); 
      } 
     }); 
    } 
} 

संपादित: क्षमा करें। डीआईडी ​​का एहसास नहीं है कि विधि के नाम समान हैं।

+2

[स्टैक ओवरव्लो] (http://stackoverflow.com/questions/7079600/java-how-to-call-super-method-from-inner-in-place-class) ;-) –

+1

मुझे यकीन था कि मैंने यह कोशिश की प्रश्न पूछने से पहले दृष्टिकोण, लेकिन ग्रहण ने मुझे त्रुटि दी। ऐसा लगता है कि मैं अशिष्ट था। अब मैं पुनः प्रयास कर रहा हूं। यह काम करता हैं! धन्यवाद! – Vlad

+0

@AlistairIsrael - चमकती त्रुटि को इंगित करने के लिए धन्यवाद। – Kal

3

आप बार

public class Bar... 

    public void mySuperSpam(){ 
     super.spam(); 
    } 
+1

+1 वाक्यांश के लिए "सुपरस्पैम" – dlev

+0

क्या यह mySuperDuperSpam नहीं होना चाहिए? :) –

2

में, इस के लिए एक आवरण समारोह बना सकते हैं इस प्रयास करें: Bar.super.spam();

Bar.this.spam(); संकलित किया गया है, लेकिन यह अनंत प्रत्यावर्तन का कारण होगा, क्योंकि आप एक ही स्पैम फोन() अपने आप में।

+2

हर कोई एक अच्छा ढेर ओवरफ्लो प्यार करता है। मेरा मतलब है, हम सब यहाँ हैं, आखिरकार। –