2009-10-09 9 views
32

मैं जावा के लिए अपेक्षाकृत नया हूं और मैं एक नई एपीआई का उपयोग कर रहा हूं। मैं इस विधि ओवरराइड में आए और मुझे यकीन है कि यह क्या कहा जाता है नहीं कर रहा हूँ:जावा में इस प्रकार की विधि ओवरराइडिंग क्या है?

public void exampleMethod() { 
    Button loginButton = new Button("login"){ 
     public void onSubmit(){ 
      //submit code here 
     } 
    }; 
} 

मैं क्या समझ से, इस बटन वर्ग के ऑनसबमिट विधि अधिभावी है। मैं इस तरह के ओवरराइडिंग से पहले कभी नहीं आया हूं। क्या इसके लिए कोई विशिष्ट नाम है? मैं इसके बारे में अधिक पढ़ना चाहता हूं लेकिन मुझे यह नहीं मिल रहा है। मेरी सभी खोजें अब तक एक नई कक्षा बनाकर नियमित तरीके से ओवरराइडिंग का परिणाम देती हैं, जो कि मैं पहले से ही परिचित हूं।

अगर कोई मुझे सही दिशा में इंगित कर सकता है तो मैं सराहना करता हूं।

धन्यवाद।

+3

महान प्रश्न ... और यह ऐसी चीज है जो संदर्भ में देखना बहुत मुश्किल है! +1 शुक्र है, क्योंकि मैंने एसओ पर एक ही प्रश्न पूछने का प्रयास किया था, यह आपके लिए आपके क्यू को मिला। – LarsH

उत्तर

28

कि एक anonymous inner class है।

private class बनाने के बजाय उपरोक्त उदाहरण में Button विस्तारित करता है हम बटन का एक उप-वर्ग बनाते हैं और शेष कोड के साथ ओवरराइड विधि के कार्यान्वयन प्रदान करते हैं।

चूंकि इस नई कक्षा को फ्लाई पर बनाया गया है, इसका कोई नाम नहीं है, इसलिए अज्ञात। जैसा कि इसे किसी अन्य वर्ग के अंदर परिभाषित किया गया है, यह एक अज्ञात आंतरिक वर्ग है।

यह बहुत ही आसान शॉर्टकट हो सकता है, खासकर Listener कक्षाओं के लिए, लेकिन यदि आप दूर ले जाते हैं और लाइन विधि परिभाषाएं बहुत लंबी हो जाती हैं तो यह आपके कोड को पालन करने में कठोर हो सकती है।

12

यह anonymous inner class है। असल में यह एक नई कक्षा बनाता है जो इस मामले में निर्दिष्ट एक (Button से प्राप्त होता है, हालांकि आप इंटरफेस को लागू करने के लिए एक ही तकनीक का उपयोग कर सकते हैं) और उचित तरीकों को ओवरराइड करते हैं। इसमें अन्य विधियां भी हो सकती हैं, लेकिन वे केवल उस कक्षा के भीतर ही उपलब्ध होंगी।

कक्षा में एक ही विधि के भीतर अंतिम स्थानीय चरों तक पहुंच है, और यदि आप एक उदाहरण विधि लिख रहे हैं तो इसका 0/पर भी एक अंतर्निहित संदर्भ है (ताकि आप अपने "मुख्य" वर्ग में अन्य विधियों को कॉल कर सकें)।

+0

धन्यवाद। मैंने आंतरिक विधि की खोज की, लेकिन इसे एक आंतरिक वर्ग के रूप में नहीं सोचा, बहुत कम अज्ञात आंतरिक वर्ग। उनके बारे में पढ़ने के लिए मैं जाता हूं! –