Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用超级类&x27;重写某个方法时,是否使用该方法?_Java_Android Asynctask - Fatal编程技术网

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的要求。