是否可以在 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”的不同方式,最好不要使用反射之类的技巧。