2010-06-01 11 views
63

(नौसिखिया जावा, पुराने समय सी # पुरुष। तक)एंड्रॉयड @Override उपयोग

मैं एंड्रॉयड उदाहरण कोड में @Override के उपयोग का एक बहुत देखा है। मैंने सोचा कि सभी जावा विधियां डिफ़ॉल्ट रूप से "वर्चुअल" थीं?

@Override क्या करता है?

उदाहरण:

private class HelloWebViewClient extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
} 
+6

एक साइड नोट के रूप में, 'ओवरराइड' एंड्रॉइड विशिष्ट नहीं है, लेकिन जावा 5 और नए में मौजूद एक एनोटेशन: http://java.sun.com/j2se/1.5.0/docs/api/java/ लैंग/ओवरराइड.html – Powerlord

+2

इस पूरे प्रश्न/थ्रेड ने मुझे यह समझने में काफी मदद की कि 'ओवरराइड 'कैसे काम करता है। अच्छा सवाल, अच्छे जवाब। धन्यवाद दोस्तों –

उत्तर

91

यह एक एनोटेशन है कि आप संकलक और अपने आईडीई कि आप विधि है कि एनोटेशन एक सुपर वर्ग विधि है, जिसकी ओवरराइड हो गया है कि इरादा बताने के लिए उपयोग कर सकते हैं। यदि आप गलतियां करते हैं तो उनके पास चेतावनी/त्रुटियां होती हैं, उदाहरण के लिए यदि आप किसी विधि को ओवरराइड करना चाहते हैं लेकिन गलत वर्तनी करते हैं, तो एनोटेशन वहां आईडीई या कंपाइलर आपको बताएगा कि यह वास्तव में सुपर क्लास विधि को ओवरराइड करने में नहीं है और इस प्रकार आप गलत वर्तनी क्यों और सही निर्धारित कर सकते हैं।

यह एंड्रॉइड अनुप्रयोगों और गतिविधियों के लिए यह सब महत्वपूर्ण है उदाहरण के लिए, जहां सभी कॉल गतिविधि जीवन चक्र पर आधारित होंगी - और यदि आप लाइफसाइकिल विधियों को सही तरीके से ओवरराइड नहीं करते हैं तो उन्हें कभी भी ढांचे द्वारा नहीं बुलाया जाएगा। सबकुछ ठीक से संकलित होगा, लेकिन आपका ऐप आपके द्वारा जिस तरह से इरादा रखता है उस पर काम नहीं करेगा। यदि आप एनोटेशन जोड़ते हैं, तो आपको एक त्रुटि मिल जाएगी।

+7

यह सिर्फ आईडीई के लिए नहीं है। जावा कंपाइलर एक त्रुटि उत्पन्न करेगा यदि आप एक ऐसी विधि को ओवरराइड करते हैं जो सुपर क्लास में नहीं है। –

+1

@ रोमेन गाय: एक चारा टाउट! – JRL

21

ओवरराइड-एनोटेशन संकलक के लिए सिर्फ एक संकेत है कि आप एक निश्चित फ़ंक्शन को ओवरराइट करना चाहते हैं। यदि फ़ंक्शन मौजूद है तो संकलक तब माता-पिता-कक्षाओं और इंटरफेस की जांच करेगा। यदि नहीं, तो आपको एक संकलन-त्रुटि मिल जाएगी।

इसकी मूल रूप से केवल एक सुरक्षा तंत्र है।

संदर्भ के लिए, this article देखना (ओवरराइड बीच में कहीं से समझाया गया है)

+5

वह लिंक अब मृत है – Flexicoder

+2

[संग्रहीत संस्करण] (https://web.archive.org/web/20080905021258/http://java.sun.com/docs/books/tutorial/java/javaOO/annotations.html) – HEATH3N

+0

अद्यतन लिंक के लिए धन्यवाद। मैंने अपना जवाब अपडेट किया। – lostiniceland

50

शुरुआत, जो वास्तव में @Override प्रक्रिया के बारे में समझने के लिए चाहते हैं के लिए इस कोड को, यह आप में मदद मिलेगी! (जावा की विरासत विरासत अवधारणा।)

उदाहरण के लिए, Fish कक्षा में दो उप-वर्ग हो सकते हैं: FreshwaterFish और SaltwaterFish

ये उपवर्गों Fish वर्ग की सभी सुविधाओं के लिए होता है, लेकिन आगे माता पिता वर्ग Fish से नई विशेषताओं और व्यवहार या संशोधित व्यवहार के माध्यम से वस्तुओं को अनुकूलित कर सकते हैं। उदाहरण के लिए, FreshwaterFish कक्षा में रहने वाले ताजे पानी के पर्यावरण के प्रकार (जैसे नदी, झील, तालाब, या पुडल) के बारे में जानकारी शामिल हो सकती है।

इसी तरह, SaltwaterFish वर्ग makeBabyFish() विधि कस्टमाइज़ कर सकता है ऐसा है कि मछली (के रूप में सुपर वर्ग में परिभाषित) प्रजनन के बाद अपने दोस्त खाती ओवरराइड प्रणाली का उपयोग कर, इस तरह से:

public class SaltwaterFish extends Fish 
{ 
    @Override 
    public void makeBabyFish(Fish fishSpouse, int numBabies) { 
     // call parent method 
     super.makeBabyFish(fishSpouse, numBabies); 
     // eat mate 
     eat(fishSpouse); 
    } 
} 
+2

बहुत अच्छी तरह से दिखाया गया .. धन्यवाद –

+0

तो मूल रूप से आप "विघटन" करने के लिए ओवरराइड का उपयोग करते हैं और सुपर-क्लास से फ़ंक्शन को फिर से लिखते हैं। समझ गया। –

+1

इसे कॉल करते समय खाने के तरीके से पहले कोई वर्ग नाम क्यों जोड़ा गया? – erical

0

अवहेलना ज्यादातर है एक विधि को परिभाषित करने के मामले में प्रयोग किया जाता है। ओवरराइडिंग इसका अर्थ है।

मैं बहुत लंगड़ा तरीके से व्याख्या करने की कोशिश करूंगा। मान लें कि यदि आपके पास ऑनक्रेट() विधि पहले से परिभाषित है और इसके साथ संबंधित गुण हैं। और फिर जब आप कुछ ऑब्जेक्ट के लिए अपने कोड में ऑनक्रेट() विधि को कॉल करते हैं, तो कोड जो आपने अभी लिखा है ... औपचारिक रूप से परिभाषित संपत्ति या आपके आवेदन के लिए ऑनक्रेट() की विरासत वाली संपत्ति को ओवरराइड कर देगा।