是否可以在 Java 中调用可覆盖的方法,使其始终执行“本地定义”版本而不是子类的覆盖版本?即有没有一个类比super是指这个类,而不是超类?
让我举一个代码示例,希望能清楚地说明我要做什么:
class A {
void foo() {
System.out.println("Foo from A");
}
void bar() {
foo(); // <-- This is the important line!
}
}
class B extends A {
@Override
void foo() {
System.out.println("Foo from B");
}
}
如果我这样做new B().bar()了,它将调用中bar()定义的方法A,该方法调用foo()被覆盖B以打印“Foo from B”。
有没有一种方法可以强制bar()方法调用foo()中定义的方法,A而不是B?就像我可以使用super.foo()inB调用foo()定义的方法一样A?不幸的是 usingthis.foo()仍然调用子类的版本。即使是类似((A) this).foo()或A.this.foo()不起作用的东西。
foo()显然,我可以简单地定义in的私有或最终版本A并调用它。但我希望有一个解决方案,我所做的只是将上面代码示例中的“重要行”更改为调用 foo() 以使其打印“Foo from A”的不同方式,最好不要使用反射之类的技巧。