Коли я роблю власний власний клас 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 doc каже: "За замовчуванням нічого не робити. Автори програм можуть перекрити цей метод ..." Це означає, що ви можете сміливо викликати супер, тому що він робить "нічого", але вам цього не потрібно, і ви дійсно можете його перекрити. Ви часто можете сказати, чи потрібно / не можете / не варто цього робити, якщо читаєте документ для цього методу.