Java 调用超级类&x27;重写某个方法时,是否使用该方法?
在重写Java 调用超级类&x27;重写某个方法时,是否使用该方法?,java,android-asynctask,Java,Android Asynctask,在重写AsyncTask中的onPostExecute等方法时,我们可以避免或删除super.onPostExecute(result)从它。你能告诉我为什么和什么时候需要打这个电话吗? 在这里,我在主要活动中将AsyncTask作为内部类实现 private class CustomAsyncTask extends AsyncTask<String, Void, Event> { @Override protected Event doInBackgrou
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);
}
}
私有类CustomAsyncTask扩展了AsyncTask{
@凌驾
受保护事件doInBackground(字符串…字符串){
事件结果=Utils.fetchEarth震动数据(字符串[0]);
返回结果;
}
@凌驾
受保护的void onPostExecute(事件结果){
super.onPostExecute(result);//调用此函数的效果如何?如果可以跳过或删除它。
更新(结果);
}
}
当我们重写某些方法时,它意味着:
我们的项目中有接口
在该接口中,一个类是父类,另一个是子类
现在重写意味着在父级和子级中都有相同的方法。
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.onPostExcecute(),如下问题所述:
当您重写一个方法时,您将重新定义该方法,即,如果在子类的实例上调用该方法(您已在其中重写了该方法),则将调用该定义的新版本
重写方法时(即重定义或换言之,用定义的子版本替换超类定义),有两种选择:
不要使用超类定义中的任何内容,并以全新的方式重写它
在新定义的某个点(开始/中间/结束)重用超类定义。这就像把一个樱桃放在上面,其中冰激凌圆锥体是方法的超类定义,樱桃被添加到新的定义中
请注意,正如前面所指出的,对的需求被视为反模式。首先,它有助于保留代码。在上面的方法中,我们可以跳过它并调用该方法。在那里调用super类的方法有什么效果吗?如果没有看到代码,很难说。我怀疑它会有一些效果,否则代码将毫无意义。通常,您希望保留框架指定的原始行为。API文档将告诉您是否必须这样做。要知道原因,您必须深入研究框架的源代码并理解底层架构。这是调用super的要求。