@Override和Super

时间:2012-02-15 10:54:46

标签: java android super

在我看来,当你覆盖方法时,你打算修改它们的用处 但是,为什么在超类中引发相同的方法(以它最初编写的方式)如果它不像我那样感兴趣?也就是说,修改方法,然后在原始方式上调用相同的方法,在我看来,第一个更改被第二个更改。我哪里错了?

2 个答案:

答案 0 :(得分:4)

除了Trevor之外,大多数需要你调用super()的方法意味着你要覆盖的方法对于流程生命周期的顺利进行是必要的(如在activity'onCreate,onPause等中)。如果你没有回复超级这些方法,android会抱怨。

另一方面,调用super的其他重写方法(在扩展像Android这样的Android类时可以看到它们)实际上返回一些东西(很可能是真或假) - 就像某些return super.methodName(args);一样 - 取决于在这种情况下,您可以覆盖这些,以便您可以手动返回值并跳过超级呼叫。

答案 1 :(得分:2)

您不一定 调用.super()来调用派生类的超类中的方法。但是,您经常这样做,因为您在重写方法中所做的事情应该另外完成超类的方法所执行的操作。是否这样做取决于相关代码的设计。

某些Android API方法绝对要求您在覆盖它们时调用.super(),因为超类的方法绝对最重要的是一些重要的东西,即使派生类重写了该方法。如果您在覆盖Android API方法时必须致电.super(),那么文档通常会这样说明。如果您没有这样做,您可能会在执行代码时特别告诉您不这样做。