Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要打电话吗;超级XXX“;每当我重写一个方法时?_Java_Android_Overriding - Fatal编程技术网

Java 我需要打电话吗;超级XXX“;每当我重写一个方法时?

Java 我需要打电话吗;超级XXX“;每当我重写一个方法时?,java,android,overriding,Java,Android,Overriding,比方说,如果我没有在超类活动的覆盖方法中调用super.onPause,那么调用onPause()时就会出现错误。但是当我在从服务派生的类的方法(onCreate,onStartCommand,…)中没有super.XXX调用时,错误不会出现 那么,在覆盖方法中,我应该在什么条件下调用super.XXX?如果派生活动类,则需要调用onPause: 派生类必须调用该方法的超类实现。如果没有,将抛出异常 服务文档在中不要求这样做 一般来说(不特别是在Android中),当您派生时,您应该调用超类的方

比方说,如果我没有在超类
活动
的覆盖方法中调用
super.onPause
,那么调用
onPause()
时就会出现错误。但是当我在从
服务
派生的类的方法(
onCreate
onStartCommand
,…)中没有
super.XXX
调用时,错误不会出现

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

如果派生
活动
类,则需要调用
onPause

派生类必须调用该方法的超类实现。如果没有,将抛出异常

服务
文档在中不要求这样做

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

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

这是不可能给出一个有用的答案。它完全取决于重写方法和被重写方法的预期目的和行为

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

  • 阅读javadocs中的方法
  • 查看实现该方法的类的示例,和/或
  • 查看要重写的方法的代码

在这种情况下,给出了一个明确的答案。

如果手册上有@t-j-crowder所说的那样,你必须给他们打电话

派生类必须通过调用 超类的实现 这个方法。如果他们没有,一个 将引发异常

如果不是,那么原因是,如果您正在调用函数,是否希望启动“正常”行为

例如,如果覆盖
onKeyDown()
,则可以在按下某个键后执行某些操作(例如“后退”)。那么你可以选择:

  • 如果您希望执行“back”的正常操作,请调用super
  • 如果不想运行正常操作,请不要调用它

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


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

@ZhengZhiren:StackOverflow是用英语完成的。(全部:谷歌翻译:“也许你应该回答我的问题”)