在 Java 中,“this”指的是当前对象。我假设“this”与当前对象的类型相同,但请考虑以下示例:
class A {
static void f() {
System.out.println("A.f");
}
void g() {
this.f();
}
}
class B extends A {
static void f() {
System.out.println("B.f");
}
}
public class C {
public static void main(String[] args) {
B test = new B();
h(test);
}
static void h(B x) {
x.g();
}
}
结果是:
A.f.
我不明白,因为当调用 xg() 时,x 属于 B 类型。在 xg() 调用中,g 在 B 中查找,然后在 A 中查找(因为 B 是 A 的子类)。g 然后调用 f,这是 A 和 B 的实例方法,这意味着调用的 f 的版本取决于隐式 THIS 参数的类型。我会假设 Bf() 会被调用,因为 X 是 B 类型,但事实并非如此。
这到底是什么类型的?