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



在从AsyncTask重写onPostExecute等方法时,我们可以避免或从中删除super.onPostExecute(result);。您能告诉我为什么以及何时需要使用此调用吗?正如我在这里实现的AsyncTask作为我的主活动中的一个内部类

private class CustomAsyncTask extends AsyncTask<String, Void, Event> {
@Override
protected Event doInBackground(String... strings) {
Event result = Utils.fetchEarthquakeData(strings[0]);
return result;
}
@Override
protected void onPostExecute(Event result) {
super.onPostExecute(result);// what is the effect of calling this? If it was possible to skip or remove it. 
updateUi(result);
}

}

当您重写一个方法时,您将重新定义该方法,即如果在子类的实例上调用该方法(在该实例中您已经重写了该方法(,则将调用该定义的新版本。

当您重写一个方法(即重新定义,或者换句话说,用定义的子版本替换超类定义(时,您有两个选择:

  1. 不要使用超类定义中的任何内容,并以全新的方式重写它
  2. 在新定义中的某个点(在开始/中间/结束(重用超类定义。这就像在冰淇淋锥上放一个樱桃,其中冰淇淋锥是该方法的超类定义,樱桃被添加到新定义中

请注意,正如Andy Turner已经指出的,调用super的要求被视为反模式。

当我们重写某个方法时,它意味着:

  1. 我们的项目中有接口
  2. 在该接口中,一个类是父类,另一个是子类

现在重写意味着在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";
}
}

由于子类中的super关键字,它将转到父类的构造函数。并且打印";内部父构造函数";。

所以最重要的是,很多时候Andoid操作系统都想访问父类,该方法被覆盖了,为此我们编写了super((。

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

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

对于您的特定情况,没有必要调用super.onPostExceute((,如下问题所述:

我应该在Android AsyncTask中调用super.onPostExecute(result(吗?

相关内容

  • 没有找到相关文章

最新更新