当我制作自己的 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。不要绑定到这个特定的例子。这只是从许多例子中随机挑选的一个例子。
(这听起来像是一个初学者的问题,但我真的很困惑。)