जब मैं अपना खुद का एंड्रॉइड कस्टम वर्ग बनाता हूं, तो मैं extend
इसका मूल वर्ग हूं । फिर जब मैं आधार विधि ओवरराइड करना चाहते हैं, मैं हमेशा फोन super()
विधि, जैसे मैं हमेशा में क्या onCreate
, onStop
आदि
और मुझे लगा कि यह वही है, क्योंकि शुरुआत से ही एंड्रॉइड टीम ने हमें हमेशा super
हर तरीके को ओवरराइड करने की सलाह दी थी ।
लेकिन, कई पुस्तकों में मैं देख सकता हूं कि डेवलपर्स, खुद से अधिक अनुभवी, अक्सर कॉल करने से चूक जाते हैं super
और मुझे वास्तव में संदेह है कि वे इसे ज्ञान की कमी के रूप में करते हैं। उदाहरण के लिए, इस मूल SAX पार्सर वर्ग को देखें जहां super
छोड़ा गया है startElement
, characters
और endElement
:
public class SAXParser extends DefaultHandler{
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName.equalsIgnoreCase("XXY")) {
//do something
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
//do something
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if(qName.equalsIgnoreCase("XXY")) {
//do something
}else () {
//do something
}
}
}
यदि आप ग्रहण या किसी अन्य आईडीई के माध्यम से किसी भी ओवरराइड विधि को बनाने का प्रयास करते हैं, super
तो हमेशा स्वचालित प्रक्रिया के एक भाग के रूप में बनाया जाएगा।
यह सिर्फ एक सरल उदाहरण था। किताबें समान कोड से भरी होती हैं ।
उन्हें कैसे पता चलेगा कि आपको कब कॉल करना है super
और कब आप इसे कॉल करना छोड़ सकते हैं?
पुनश्च। इस विशिष्ट उदाहरण से मत बंधिए। यह कई उदाहरणों से बेतरतीब ढंग से उठाया गया एक उदाहरण मात्र था।
(यह एक शुरुआती प्रश्न की तरह लग सकता है, लेकिन मैं वास्तव में भ्रमित हूं।)
endElement
's एपीआई डॉक कहता है' 'डिफ़ॉल्ट रूप से, कुछ भी न करें। एप्लिकेशन लेखक इस पद्धति को ओवरराइड कर सकते हैं ... "जिसका अर्थ है कि आप सुरक्षित रूप से सुपर कॉल कर सकते हैं क्योंकि यह" कुछ नहीं "करता है लेकिन आपके पास नहीं है और आप इसे वास्तव में ओवरराइड कर सकते हैं। आप अक्सर बता सकते हैं कि क्या आपको उस विधि के लिए डॉक्टर को पढ़ना / करना है या नहीं करना चाहिए।