【发布时间】:2012-05-01 22:53:31
【问题描述】:
当我创建自己的 Android 自定义类时,我 extend 它的原生类。然后当我想重写基方法时,我总是调用super() 方法,就像我在onCreate、onStop 等中一样。
我认为就是这样,因为从一开始 Android 团队就建议我们在每次方法覆盖时始终调用 super。
但是,在许多书籍中,我可以看到比我更有经验的开发人员经常忽略调用super,我真的怀疑他们这样做是因为缺乏知识。例如,看一下这个基本的SAX 解析器类,其中startElement、characters 和endElement 中省略了super:
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,因为它“什么都不做”,但您不这样做不必,你可以真正覆盖它。如果您阅读该方法的文档,您通常可以判断您是否必须/可以/不应该这样做。 -
小例子:我在启动画面中使用 onBackPressed(),并且我不调用 super 所以它不会退出启动,它只是禁用按钮。
-
@sandalone 很抱歉在这里提问,但是您是否有关于如何通过应用内结算处理增值税的经验,以及哪些国家/地区由 Google 自动完成,哪些国家/地区必须手动报告/缴纳增值税?见stackoverflow.com/questions/36506835/…
标签: java android overriding