Kiedy tworzę własną niestandardową klasę Androida, tworzę extendjej klasę natywną. Wtedy, kiedy chcę zastąpić metodę podstawową, zawsze wywołać super()metodę, tak jak zawsze w onCreate, onStopitp
Pomyślałem, że to jest to, ponieważ od samego początku zespół Android doradzał nam, aby zawsze wywoływać supernadpisanie każdej metody.
Ale w wielu książkach widzę, że programiści, bardziej doświadczeni ode mnie, często pomijają dzwonienie superi naprawdę wątpię, czy robią to z braku wiedzy. Na przykład, spójrz na tego podstawowego SAX klasy parsera w których superpominięto w startElement, charactersi 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
}
}
}
Jeśli spróbujesz utworzyć jakąkolwiek metodę nadpisywania za pośrednictwem Eclipse lub innego IDE, superzawsze zostanie utworzona jako część zautomatyzowanego procesu.
To był tylko prosty przykład. Książki są pełne podobnego kodu .
Skąd wiedzą, kiedy musisz zadzwonić, supera kiedy możesz pominąć dzwonienie?
PS. Nie wiąż się z tym konkretnym przykładem. To był tylko przykład losowo wybrany z wielu przykładów.
(To może brzmieć jak pytanie dla początkujących, ale jestem naprawdę zdezorientowany).

endElementDokument API mówi "Domyślnie nic nie rób. Twórcy aplikacji mogą przesłonić tę metodę ...", co oznacza, że możesz bezpiecznie wywołać super, ponieważ nie robi "nic", ale nie musisz i naprawdę możesz to zmienić. Często możesz stwierdzić, czy musisz / nie możesz / nie powinieneś tego robić, czytając dokumentację dotyczącą tej metody.