让我们考虑一下Asynctask类。
它具有可重写的方法,例如 onPreExecute , onProgressUpdate 等。 如果我不添加super,编译器不会出错。' method-name'等我应该这样做吗?当我们不必调用时,调用(或不调用)超级方法有什么好处
当我们考虑扩展EditText类时,在自定义之后,您需要确实调用超级构造函数。
注意:我在谈论可选的超级电话。
答案 0 :(得分:2)
一般来说,并且作为面向对象编程的规则:除非你有充分的理由打破它,并且你确切地知道超类方法实现的全部内容,你应该总是调用超类方法。
在AsyncTask
的特定情况下 - 不需要调用超类方法,只是因为它没有执行任何代码。
相反的示例:如果您不调用Activity
回调的超级方法,例如onCreate()
和onDestroy()
,您将完全破坏活动,并且可能没有任何效果。这是因为这种方法的超类实现需要从每个活动中获取大量的东西。
所以结论是,如果你不是基类的作者 - 寻找提供任何关于方法的提示的文档,以便知道如何,以及如果你应该调用超类方法。
答案 1 :(得分:1)
因为它们是空方法,所以你不必调用它们。它们只是供您用于覆盖。
答案 2 :(得分:1)
如果你没有调用超类的方法,那么...超类的方法不会被调用。这是否是一个问题完全取决于超类方法的作用。如果它是可选的,如你所说,如果你需要,可以打电话(例如,你的逻辑需要它做什么),如果你不这样做就不要打电话。
如果超类的方法是为空,那么对其进行编码编码的唯一原因就是你重新安排了你的课程。例如,假设您以A
为基础,使用空foo
方法,并B
从中派生class B extends A
。之后,您希望能够将其更改为class B extends SpecialA
,其中SpecialA
是A
的特殊版本foo
。如果您已离开B
foo
的超级电话,则必须记住添加它。如果你把它包括在内,你就不必记得添加它。
(发生的唯一超级调用是在构造对象时调用超类的构造函数,但是如果你把它留下来,编译器将提供对零参数版本的调用[例如,super()
]。但这是一个构造函数,而不是方法。)