Когда я создаю свой собственный класс 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а когда можно не звонить?
PS. Не привязывайтесь к этому конкретному примеру. Это был просто случай, выбранный из множества примеров.
(Это может показаться вопросом новичка, но я действительно сбит с толку.)

endElementВ документе API говорится: «По умолчанию ничего не делать. Авторы приложений могут переопределить этот метод ...», что означает, что вы можете безопасно вызывать super, потому что он «ничего не делает», но вам это не нужно, и вы действительно можете переопределить его. Часто вы можете определить, нужно ли / можно или не следует этого делать, если вы прочитаете документацию по этому методу.