最后打电话给超级

kau*_*edi 9 java android overriding

我对人们在重写方法中使用super的方式感到困惑.喜欢什么是不同的

  @Override
  protected void onResume() {
    // some logic here 
    super.onResume();
  }
Run Code Online (Sandbox Code Playgroud)

  @Override
  protected void onResume() {
    super.onResume();
    // some logic here 
  }
Run Code Online (Sandbox Code Playgroud)

当我们在最后调用super()时它是否执行任何预处理,因为通常我们调用super来初始化父构造函数.

两种性能的差异.

Jon*_*eet 19

首先,方法super()根本不允许使用plain - 仅在构造函数中.我假设你实际上是为了一个合适的方法.super.someMethod()

当我们在最后调用super()时它是否执行任何预处理,因为通常我们调用super来初始化父构造函数.

使用super的方法是在构造函数中使用它有所不同.

在构造函数中,super(或this)必须是第一个语句(如果存在,super()否则隐式)并且它只能调用构造函数.

在一个方法中,使用super.someMethod()简单地调用超类的实现someMethod.你可以从任何方法调用它(你someMethod当时不必覆盖),你可以在方法的任何一点调用它.它在你调用它的时候被调用,它只是避免了对覆盖实现的多态调用.

所以基本上在哪里 - 以及是否 - 你称它取决于你想要的效果.在某些情况下,您可能希望在自己的自定义行为之前调用相同方法的超类实现,在某些情况下,您可能希望在自己的自定义行为之后调用它.

  • @YoushaAleayoub:再次,你在谈论*一个特定的方法实现*(或推荐的特定方法的覆盖).我在谈论语言的一般规则 - 一个方法完全可以覆盖另一个,做其他工作然后调用`super.foo()`.如果你不相信我,试试吧. (2认同)