在覆盖方法时调用 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);
}
}
当我们覆盖某些方法时,这意味着:
- 我们的项目中有接口。
- 在该界面中,一个 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 定义替换为子版本的定义),您有两个选择:
- 不要使用 superclass 定义中的任何内容,并以全新的方式重写它。
- 在新定义中的某些点(在 beginning/middle/end 中)重用 superclass 定义。这就像在 ice cream cone 上放一颗樱桃,其中冰激凌甜筒是方法的超级 class 定义,并且在新定义中添加了樱桃。
请注意,正如 , a requirement to call super 已经指出的那样,它被认为是一种反模式。
虽然从 AsyncTask
中覆盖 onPostExecute
等方法,但我们可以避免或从中删除 super.onPostExecute(result);
。你能告诉我为什么以及什么时候我们需要使用这个电话吗?
因为我在这里将 AsyncTask 实现为我的 Main Activity
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);
}
}
当我们覆盖某些方法时,这意味着:
- 我们的项目中有接口。
- 在该界面中,一个 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 定义替换为子版本的定义),您有两个选择:
- 不要使用 superclass 定义中的任何内容,并以全新的方式重写它。
- 在新定义中的某些点(在 beginning/middle/end 中)重用 superclass 定义。这就像在 ice cream cone 上放一颗樱桃,其中冰激凌甜筒是方法的超级 class 定义,并且在新定义中添加了樱桃。
请注意,正如