Когда я создаю свой собственный класс 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, потому что он «ничего не делает», но вам это не нужно, и вы действительно можете переопределить его. Часто вы можете определить, нужно ли / можно или не следует этого делать, если вы прочитаете документацию по этому методу.