在覆盖方法时调用 super class 的方法的目的是什么?

What is the purpose of calling super class's method while overriding a method?

虽然从 AsyncTask 中覆盖 onPostExecute 等方法,但我们可以避免或从中删除 super.onPostExecute(result);。你能告诉我为什么以及什么时候我们需要使用这个电话吗? 因为我在这里将 AsyncTask 实现为我的 Main Activity

中的内部 class
    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. 在该界面中,一个 Class 是父级,另一个是子级。

现在覆盖意味着在父项和子项中具有相同的方法。 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";
 }

}

由于 Child 中的 super 关键字 Class 它将转到 Parent 的构造函数。并打印“内部父构造函数”。

所以最主要的是很多时候 Andoid OS 会想要访问 Parent Class 方法被覆盖,为此我们编写 super().

What is the purpose of calling super class's method while overriding a method?

目的是 运行 class 中的方法,当前 class 继承自该方法以执行一些 class 负责的工作,因为它可以是超级 class' 状态的一些设置。

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

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

当您重写一个方法时,您重新定义了该方法,即如果在子 class 的实例上调用此方法(您在其中重写了该方法),这个新版本的定义将是打电话。

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

  1. 不要使用 superclass 定义中的任何内容,并以全新的方式重写它。
  2. 在新定义中的某些点(在 beginning/middle/end 中)重用 superclass 定义。这就像在 ice cream cone 上放一颗樱桃,其中冰激凌甜筒是方法的超级 class 定义,并且在新定义中添加了樱桃。

请注意,正如 , a requirement to call super 已经指出的那样,它被认为是一种反模式。