假设我有以下简单代码:
class A {
protected int someMethod() {
return staticMethod();
}
private static int staticMethod() {
return 10;
}
}
class B extends A {
protected int someMethod() {
return super.someMethod();
}
public static int staticMethod() {
return 20;
}
}
class TestX {
private void main() {
B b = new B();
int finalValue =b.someMethod();
}
}
在上面的代码中,当执行b.someMethod()
时,它最终会调用A
的{{1}}版本。但我认为基于主对象的引用类型调用静态方法。由于调用staticMethod()
的对象属于someMethod()
类型,因此B
的版本B
不应被调用staticMethod()
}} A
被调用(因为行someMethod()
)?
鉴于上述代码,我是否有办法让return super.someMethod();
B
执行,以便返回20而不是10?
我发现了一个类似的问题,但我认为其中提出的想法与我无关: