Java 如果我不';是否在扩展类中调用可选的超级方法或构造函数?
让我们考虑一下Asynctask类 它具有可重写的方法,如onPreExecute、onProgressUpdate等。 若我不添加super.“method-name”等,编译器不会给出错误。那个么我该不该这样做呢?当我们不需要调用超级方法时,调用(或不调用)超级方法有什么好处 当我们考虑扩展EditText类时,在定制之后,您确实需要调用超级构造函数Java 如果我不';是否在扩展类中调用可选的超级方法或构造函数?,java,android,android-asynctask,Java,Android,Android Asynctask,让我们考虑一下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。