当我创建自己的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,因为它“不执行任何操作”,但您不必这样做,并且可以真正覆盖它。如果您阅读该方法的文档,通常可以告诉您是否必须/不可以/不应该这样做。