2010-12-03 15 views
66
public class NaiveAlien extends Alien 
{ 

    @Override 
    public void harvest(){} 

} 

मैं अपने मित्र के कोड को समझने की कोशिश कर रहा था, और मुझे कोड में @ ओवरराइड वाक्यविन्यास नहीं मिला है। वह क्या करता है और हमें कोडिंग में क्यों आवश्यकता है? धन्यवाद।@ ओवरराइड का क्या अर्थ है?

उत्तर

122

यह कंपाइलर के लिए यह संकेत देने के लिए एक संकेत है कि आप अभिभावक वर्ग (या जावा 6 में इंटरफेस) की विधि को ओवरराइड कर रहे हैं।

यदि संकलक यह पता लगाता है कि ओवरराइड करने के लिए कोई फ़ंक्शन नहीं है, तो यह आपको चेतावनी देगा (या त्रुटि)।

यह टाइपो या एपीआई परिवर्तनों की त्वरित पहचान करने के लिए बेहद उपयोगी है। मान लें कि आप अपने पैरेंट क्लास 'विधि harvest() को ओवरराइड करने का प्रयास कर रहे हैं लेकिन इसे harvset() वर्तनी दें, आपका प्रोग्राम चुपचाप बेस क्लास को कॉल करेगा, और @Override के बिना, आपको इसके बारे में कोई चेतावनी नहीं होगी।

इसी तरह, यदि आप लाइब्रेरी का उपयोग कर रहे हैं, और लाइब्रेरी के संस्करण 2 में, harvest() को एक पूर्णांक पैरामीटर लेने के लिए संशोधित किया गया है, तो आप इसे अब ओवरराइड नहीं करेंगे। दोबारा, @Override आपको तुरंत बताएगा।

+14

ध्यान दें कि @ ओवरराइड केवल सार्वजनिक और संरक्षित कार्यों के लिए काम करता है। – MrMas

+0

यह भी उल्लेख किया जाना चाहिए कि ** एकाधिक ** एनोटेशन भी संभव हैं और अन्य कोड भी इसका उपयोग करके जोड़ा जा सकता है। उदाहरण के लिए, एंड्रॉइड एम ऐप्स में अनुमतियों की जांच करते समय, जैसा कि [PermissionsDispatcher] (https://github.com/hotchemi/PermissionsDispatcher) में किया गया है। – not2qubit

9

@Override का मतलब है कि आप बेस क्लास विधि को ओवरराइड कर रहे हैं। जावा 6 में, इसका मतलब यह भी है कि आप एक इंटरफ़ेस से एक विधि को कार्यान्वित कर रहे हैं। यह आपको टाइपो से बचाता है जब आपको लगता है कि एक विधि ओवरराइड कर रहे हैं लेकिन आपने कुछ गलत टाइप किया है।

23

इस सुविधा को एनोटेशन कहा जाता है। @Override कंपाइलर को यह जानने के लिए एक एनोटेशन का उपयोग करने का वाक्यविन्यास है, "हे कंपाइलर, मैं पैरेंट क्लास में फसल क्या बदल रहा हूं", फिर संकलक तुरंत कह सकता है, "दोस्त, आप इसे गलत तरीके से नाम दे रहे हैं"। कंपाइलर तब तक संकलित नहीं होगा जब तक कि आप इसे सही तरीके से नाम न दें।

तो, इस @Override एनोटेशन के बिना, संकलक त्रुटि नहीं करेगा और इसे एक नई विधि घोषणा माना जाएगा। इस बिंदु पर त्रुटि को पहचानना मुश्किल होगा।

+29

मैं संकलक चेतावनियों की इच्छा करता हूं और त्रुटियों ने मुझे "दोस्त" के रूप में संबोधित किया। – CSJ

+1

पूंजीकरण के मामले, हम '@ ओवरराइड ', दोस्त के बारे में बात कर रहे हैं :) – datafiddler

संबंधित मुद्दे