每当我覆盖一个方法时,我是否需要调用“super.XXX”?

时间:2011-02-22 08:23:45

标签: java android override

假设,如果我没有在超类super.onPause的覆盖方法中调用Activity,则在调用onPause()时会出错。但是,如果我在super.XXX派生的类的方法(onCreateonStartCommand,...)中没有Service次调用,则不会显示错误。

那么在什么条件下我应该在覆盖方法中调用super.XXX

4 个答案:

答案 0 :(得分:7)

如果您派生onPause课程,则需要致电Activity {/ 3}}:

  

派生类必须调用超类的此方法的实现。如果他们不这样做,将抛出异常。

Service文档不需要documentation tells you

一般情况下(不是特别在Android中),当你派生时,你应该调用超类的方法,除非你知道你不应该。这是一个需要逐个案例的决定,但默认(我会说)是你做的。

答案 1 :(得分:0)

  

那么在什么条件下我应该在覆盖方法中调用super.XXX?

不可能给出有用的答案。它完全取决于覆盖方法的预期目的和行为以及被覆盖的方法。

如果您不知道,则需要执行以下一项或多项操作:

  • 阅读方法的javadocs,
  • 查看实现该方法的类的示例,和/或
  • 查看您要覆盖的方法的代码。

在这种特殊情况下,javadoc给出了明确的答案。

答案 2 :(得分:0)

如果手册中有这样说,你必须打电话给@ t-j-crowder说。

it says

  

派生类必须通过调用   超类的实现   这种方法。如果他们不这样做,   异常将被抛出。

如果没有,那么推理是,如果你正在调用一个函数,你想要启动'正常'行为吗?

例如,如果你覆盖onKeyDown()你可以在按下某个键后做某事(例如'回')。然后你可以选择:

  • 如果您想要执行'back'的正常操作,请调用super
  • 如果您不想执行正常操作,请不要调用它。

答案 3 :(得分:0)

客户端代码只能知道子类Activity(称之为MyActivity),客户端代码无法知道Activity。但是,MyActivity可以知道其基类Activity。

如果重写的方法onPause()与其基类相同,则不需要显式覆盖它。