Quando creo la mia classe personalizzata Android, ho la extend
sua classe nativa. Poi quando voglio l'override del metodo di base, ho sempre chiamare super()
il metodo, proprio come faccio sempre in onCreate
, onStop
ecc
E ho pensato che fosse così, poiché sin dall'inizio il team di Android ci ha consigliato di chiamare sempre super
l'override di ogni metodo.
Ma in molti libri posso vedere che gli sviluppatori, più esperti di me, spesso omettono di chiamare super
e dubito davvero che lo facciano per mancanza di conoscenza. Per esempio, guardate questa base SAX classe di parser in cui super
viene omesso in startElement
, characters
e 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
}
}
}
Se provi a creare un metodo di sostituzione tramite Eclipse o qualsiasi altro IDE, super
verrà sempre creato come parte del processo automatizzato.
Questo era solo un semplice esempio. I libri sono pieni di codice simile .
Come fanno a sapere quando devi chiamare super
e quando puoi ometterlo di chiamare?
PS. Non legarti a questo esempio specifico. Era solo un esempio scelto a caso da molti esempi.
(Potrebbe sembrare una domanda per principianti, ma sono davvero confuso.)
endElement
Il documento API di dice "Per impostazione predefinita, non fare nulla. Gli autori di applicazioni possono sovrascrivere questo metodo ...", il che significa che puoi tranquillamente chiamare super perché non fa "niente" ma non devi e puoi davvero sovrascriverlo. Spesso puoi dire se devi / puoi / non dovresti farlo se leggi il documento per quel metodo.