Cuando creo mi propia clase personalizada de Android, extend
su clase nativa. Entonces cuando quiero anular el método de base, siempre llamo super()
método, al igual que siempre hago en onCreate
, onStop
, etc.
Y pensé que esto era todo, ya que desde el principio el equipo de Android nos aconsejó que siempre invocáramos super
cada anulación de método.
Pero, en muchos libros puedo ver que los desarrolladores, con más experiencia que yo, a menudo omiten las llamadas super
y realmente dudo que lo hagan por falta de conocimiento. Por ejemplo, observe esta clase de analizador SAX básica donde super
se omite en startElement
, characters
y 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
}
}
}
Si intenta crear cualquier método de anulación a través de Eclipse o cualquier otro IDE, super
siempre se creará como parte del proceso automatizado.
Este fue solo un ejemplo simple. Los libros están llenos de códigos similares .
¿Cómo saben cuándo debe llamar super
y cuándo puede omitirlo?
PD. No se limite a este ejemplo específico. Fue solo un ejemplo elegido al azar de muchos ejemplos.
(Esto puede parecer una pregunta para principiantes, pero estoy realmente confundido).
endElement
El documento de la API dice "De forma predeterminada, no hacer nada. Los escritores de aplicaciones pueden anular este método ...", lo que significa que puede llamar de forma segura a super porque no hace "nada", pero no es necesario y realmente puede anularlo. A menudo puede saber si tiene que / puede / no debe hacerlo si lee el documento de ese método.