独自のAndroidカスタムクラスを作成すると、extend
そのネイティブクラスになります。次に、ベースメソッドをオーバーライドするときsuper()
はonCreate
、常にonStop
、などで行うように、常にメソッドを呼び出します。
そして、これはそれだと思ったのは、最初からAndroidチームが常に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
を省略できるのか、彼らはどうやって知るのですか
PS。この特定の例に束縛しないでください。これは、多くの例の中からランダムに選んだ一例にすぎません。
(これは初心者の質問のように聞こえるかもしれませんが、私は本当に混乱しています。)
endElement
のAPIドキュメントには、「デフォルトでは何もしない。アプリケーションの作成者はこのメソッドをオーバーライドする可能性があります...」とあります。つまり、「何もしない」ため、superを安全に呼び出すことができます。そのメソッドのドキュメントを読んだ場合、する必要があるか、できないか、するべきではないか、ということがよくわかります。