Kiedy tworzę własną niestandardową klasę Androida, tworzę extend
jej klasę natywną. Wtedy, kiedy chcę zastąpić metodę podstawową, zawsze wywołać super()
metodę, tak jak zawsze w onCreate
, onStop
itp
Pomyślałem, że to jest to, ponieważ od samego początku zespół Android doradzał nam, aby zawsze wywoływać super
nadpisanie każdej metody.
Ale w wielu książkach widzę, że programiści, bardziej doświadczeni ode mnie, często pomijają dzwonienie super
i naprawdę wątpię, czy robią to z braku wiedzy. Na przykład, spójrz na tego podstawowego SAX klasy parsera w których super
pominięto w startElement
, characters
i 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, super
zawsze 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ć, super
a 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).
endElement
Dokument 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.