Java: foo() 在super class中时,this.foo() 和super.foo() 是一样的吗?

Java: Are this.foo() and super.foo() the same when foo() is in the super class?

假设我有以下 classes:

class Foo {
    protected void method() {}
}

class Bar extends Foo {

}

此时,从 class 栏,我可以通过两种方式访问​​ method()

据我所见,他们似乎在执行相同的操作。在这种情况下,这两者之间有区别吗?如果有,是否有首选版本?

使用 super 是有意义的,因为 method() 是超级 class 的一部分。我想使用 this 也是有意义的,因为 Bar 将继承 class Foo 的属性,因此 method() 也是如此,对吗?

是的,this.foo()调用与super.foo()相同的方法。

请注意,如果 foo() 在子 class 中被覆盖,将会有所不同。但在这种情况下,它运行相同的方法实现。

当我们需要特别请求执行superclass的方法实现时,我们使用super.foo(),当当前class.[=19=中有一个可用的方法实现时。 ]

Using super makes sense because method() is part of the super class

是的,但请记住,子 class 可能会在某些时候发生变化并被覆盖 foo(),在这种情况下 super.foo() 可能会开始调用意外的实现。
这是需要注意的事情。因此,调用this.foo()或不合格foo()可能是合理的。

请注意子级可能会再次被覆盖:

public class Main {
  static class Foo {
    protected void method() {
      System.out.println("Bye");
    }
  }

  static class Bar extends Foo {
    {
      this.method();
      super.method();
    }
  }

  static class Baz extends Bar {
    protected void method() {
      System.out.println("Hi");
    }
  }

  public static void main(String[] args) {
    new Baz();
  }
}

生产:

Hi
Bye

因此,虽然 this.method()super.method() 在某些情况下可能表现相同,但它们不会产生相同的字节码。