আমি যখন আমার নিজের অ্যান্ড্রয়েড কাস্টম ক্লাস করি তখন আমি 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
}
}
}
আপনি যদি Eclipse বা অন্য কোনও IDE এর মাধ্যমে কোনও ওভাররাইড পদ্ধতি তৈরি করার চেষ্টা করেন super
তবে সর্বদা স্বয়ংক্রিয় প্রক্রিয়াটির অংশ হিসাবে তৈরি করা হবে।
এটি ছিল একটি সাধারণ উদাহরণ। বই একই ধরণের কোড পূর্ণ ।
কখন আপনাকে কল করা উচিত super
এবং কখন আপনি এটি কলিং বাদ দিতে পারেন তা তারা কীভাবে জানবে ?
পুনশ্চ. এই নির্দিষ্ট উদাহরণকে আবদ্ধ করবেন না। এটি এলোমেলোভাবে অনেক উদাহরণ থেকে বেছে নেওয়া একটি উদাহরণ।
(এটি একটি প্রাথমিক প্রশ্নের মতো মনে হতে পারে তবে আমি সত্যিই বিভ্রান্ত।
endElement
এর এপিআই ডকটি বলেছেন "ডিফল্টরূপে, কিছুই করবেন না Application অ্যাপ্লিকেশন রাইটাররা এই পদ্ধতিটিকে ওভাররাইড করতে পারে ..." এর অর্থ আপনি নিরাপদে সুপারকে কল করতে পারেন কারণ এটি "কিছুই" করে না তবে আপনার দরকার নেই এবং আপনি সত্যই এটিকে ওভাররাইড করতে পারেন। আপনি প্রায়শই বলতে পারেন যে আপনি যদি সেই পদ্ধতির জন্য ডকটি পড়ে থাকেন তবে এটি করতে / করতে / করা উচিত নয়।