覆盖方法时调用超类的方法的目的是什么?

时间:2020-08-15 10:45:41

标签: java android-asynctask

尽管从annotation中覆盖诸如onPostExecute之类的方法,我们可以避免或从中删除AsyncTask。您能告诉我为什么以及何时需要使用此通话吗? 因为我在这里将AsyncTask实施为Main Activity中的内部类

super.onPostExecute(result);

3 个答案:

答案 0 :(得分:3)

覆盖方法时,将重新定义该方法,即,如果在子类的实例(已覆盖该方法的实例)上调用此方法,则将调用该定义的新版本。

当您覆盖方法时(例如,重新定义或换句话说,将超类定义替换为该定义的子版本),您有两种选择:

  1. 请勿使用超类定义中的任何内容,并以全新的方式对其进行重写。
  2. 在新定义的某个位置(在开头/中间/结尾)重用超类定义。这就像在ice cream cone上放了一个樱桃,其中冰激凌蛋卷是该方法的超类定义,并且在新定义中添加了樱桃。

请注意,如Andy Turner所指出,对call super的要求被视为反模式。

答案 1 :(得分:2)

当我们重写某些方法时,这意味着:

  1. 我们在项目中有界面。
  2. 在该界面中,一类是父类,另一类是子类。

Now Override意味着在Parent和Child中都具有相同的方法。 Se下面的示例:

class Parent
{

 public Parent()
 {
  "Inside Parent Constructor";
 }
 
 public void meth()
 {
  "Inside Parent Method";
 }

}

class Child
{

 public Child()
 {
  "Inside Child Constructor";
 }
 
 public void meth()
 {
  super();              
  "Inside Parent Method";
 }

}

由于子类中的超级关键字,它将转到父级的构造函数。并打印“内部父级构造函数”。

所以主要的是,很多时候Andoid OS都想访问从其重写方法的父类,为此我们编写了super()。

答案 2 :(得分:2)

在重写方法时调用超类的方法的目的是什么?

目的是在继承当前类的类中运行该方法,以执行该类负责的工作,因为这可能是超类状态的某种设置。

对于您的特定情况,无需调用以下问题中所述的super.onPostExcecute():

Should I call super.onPostExecute(result) in Android AsyncTask?

相关问题