Когда я создаю свой собственный пользовательский класс Android, я extend
свой родной класс. Затем, когда я хочу переопределить базовый метод, я всегда вызываю метод super()
, точно так же, как я всегда делаю в onCreate
, onStop
и т. д.
И я думал, что это он, так как с самого начала Android команда посоветовала нам всегда вызывать super
при каждом переопределении метода.
Но в многих книгах я вижу, что разработчики, более опытные, чем я, часто пропускают вызов super
и я очень сомневаюсь, что они делают это из-за недостатка знаний. Например, посмотрите на этот базовый класс парсера SAX , где super
опущен в startElement
,characters
и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
}
}
}
Если вы попытаетесь создать какой-либо метод переопределения через Eclipse или любую другую IDE, super
всегда будет создаваться как часть автоматизированного процесса.
Это был всего лишь простой пример. Книги полны подобного кода .
Как они узнают, когда нужно звонить super
, а когда можно не звонить?
ПС. Не привязывайтесь к этому конкретному примеру. Это был просто пример, случайно выбранный из множества примеров.
(Это может показаться вопросом новичка, но я действительно запутался.)