Quando eu faço minha própria classe personalizada Android, eu uso extend
sua classe nativa. Então, quando eu quiser substituir o método base, eu sempre chamo super()
método, assim como eu sempre faço em onCreate
, onStop
, etc.
E eu pensei que era isso, desde o início a equipe do Android nos aconselhou a sempre chamar super
todos os métodos de substituição.
Mas, em muitos livros , posso ver que os desenvolvedores, mais experientes do que eu, muitas vezes omitem a chamada super
e eu realmente duvido que eles façam isso por falta de conhecimento. Por exemplo, olhe para isto básica SAX classe do analisador, onde super
é omitido na 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 você tentar criar qualquer método de substituição via Eclipse ou qualquer outro IDE, super
sempre será criado como parte do processo automatizado.
Este foi apenas um exemplo simples. Os livros estão cheios de códigos semelhantes .
Como eles sabem quando você deve ligar super
e quando pode omitir a ligação?
PS. Não se vincule a este exemplo específico. Foi apenas um exemplo escolhido aleatoriamente entre muitos exemplos.
(Pode parecer uma pergunta de iniciante, mas estou muito confuso.)
endElement
O documento da API de diz "Por padrão, não faça nada. Os criadores de aplicativos podem sobrescrever este método ...", o que significa que você pode chamar super com segurança porque ele não faz "nada", mas você não precisa e pode realmente sobrescrevê-lo. Freqüentemente, você pode dizer se precisa / pode / não deve fazer isso se ler o documento desse método.