Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 如果我不';是否在扩展类中调用可选的超级方法或构造函数?_Java_Android_Android Asynctask - Fatal编程技术网

Java 如果我不';是否在扩展类中调用可选的超级方法或构造函数?

Java 如果我不';是否在扩展类中调用可选的超级方法或构造函数?,java,android,android-asynctask,Java,Android,Android Asynctask,让我们考虑一下Asynctask类 它具有可重写的方法,如onPreExecute、onProgressUpdate等。 若我不添加super.“method-name”等,编译器不会给出错误。那个么我该不该这样做呢?当我们不需要调用超级方法时,调用(或不调用)超级方法有什么好处 当我们考虑扩展EditText类时,在定制之后,您确实需要调用超级构造函数 注意:我说的是可选的超级调用。因为它们是空方法,所以您不必调用它们。它们只是供您用来重写的。一般来说,作为面向对象编程中的一条规则:除非您有充

让我们考虑一下Asynctask类

它具有可重写的方法,如onPreExecute、onProgressUpdate等。 若我不添加super.“method-name”等,编译器不会给出错误。那个么我该不该这样做呢?当我们不需要调用超级方法时,调用(或不调用)超级方法有什么好处

当我们考虑扩展EditText类时,在定制之后,您确实需要调用超级构造函数


注意:我说的是可选的超级调用。

因为它们是空方法,所以您不必调用它们。它们只是供您用来重写的。

一般来说,作为面向对象编程中的一条规则:除非您有充分的理由打破它,并且您确切地知道超级类方法实现的全部内容,否则您应该始终调用超级类方法

AsyncTask
的特定情况下,不需要调用超类方法,因为它不执行任何代码

相反的示例:如果您不调用
活动的超级方法
回调,例如
onCreate()
onDestroy()
,您将完全中断该活动,并且可能什么都不起作用。这是因为该方法的超类实现完成了每个活动所需的大量工作


因此,结论是,如果您不是基类的编写者,请查找文档,其中提供了有关要重写的方法的任何提示,以便掌握诀窍,如果您应该调用超类方法。

如果您不调用超类的方法,那么……超类的方法不会被调用。这是否是一个问题完全取决于超类方法的功能。如果它是可选的,就像你说的,那么如果你需要调用它(例如,你的逻辑需要它做什么),如果你不需要,就不要调用它

如果超类的方法为空,那么对其调用进行编码的唯一原因就是重新设置类的基址。例如,假设您将
A
作为带有空
foo
方法的基,并从中派生出
B
B类扩展了A
)。稍后,您希望能够将其更改为
classebextensedspeciala
,其中
SpecialA
a
的一个特殊版本,其中
foo
执行某些操作。如果您将超级调用从
B
foo
中删除,则必须记住添加它。如果你把它放在第一位,你就不必记得添加它了


(唯一必须发生的超调用是在构造对象时调用超类的构造函数,但如果您不这样做,编译器将提供对零args版本的调用[例如,
super()
],但这是一个构造函数,而不是一个方法。)

扩展EditText类怎么样。您需要在自定义后在最后调用super。