2012-08-13 73 views
12

संभव डुप्लिकेट:
Why is super.super.method(); not allowed in Java?जावा:। कैसे ओवरराइड विधि में सुपर कॉल करने के लिए() सुपर() (दादा-दादी विधि)

मैं 3 वर्गों है वे के रूप में एक दूसरे से वारिस इस प्रकार है:

A 
↳ 
    B 
    ↳ 
    C 

प्रत्येक वर्ग मैं निम्न विधि है अंदर:

protected void foo() { 
    ... 
} 

वर्ग C मैं कक्षा A से foo कॉल करना चाहते हैं अंदर B में foo बुला बिना:

protected void foo() { 
    // This doesn't work, I get the following compile time error: 
    // Constructor call must be the first statement in a constructor 
    super().super().foo(); 
} 

संपादित
कुछ प्रसंग जानकारी:
कक्षा बी एक वास्तविक वर्ग हम इस्तेमाल करते हैं। कक्षा सी एक यूनिट टेस्ट क्लास है, इसमें कुछ संशोधन हैं। fooB के अंदर विधि कुछ चीजें जो हम नहीं चाहते हैं, इसलिए हम C के अंदर इसे ओवरराइड करते हैं। हालांकि foo कक्षा A में उपयोगी है और इसे कॉल करने की आवश्यकता है।

+0

में foo() फोन करेगा इस विषय http पर एक नज़र डालें: // stackoverflow .com/प्रश्न/586,363/क्यों-सुपर-सुपर-विधि-नहीं-अनुमति-इन-जावा है – Pr0gr4mm3r

उत्तर

7

जावा में यह संभव नहीं है। आपको B पर भरोसा करना होगा कि आपको A के foo तक पहुंचने का एक स्पष्ट तरीका प्रदान करना होगा।

14
  • एक सुपर कक्षा में एक विधि कॉल करने के लिए आपको super.foo(), नहीं super().foo() का उपयोग करें। super() अभिभावक वर्ग के निर्माता को बुलाता है।
  • super.super.foo() पर कॉल करने का कोई तरीका नहीं है। आप वर्ग बी में super.foo() के लिए एक कॉल में जोड़ सकते हैं, तो सी में super.foo() बुला कि, बी में super.foo() फोन करेगा जो बारी में ए
संबंधित मुद्दे