在 Java 中可以使用 "Indirect Overriding" 个静态方法吗?

Is "Indirect Overriding" of static methods possible in Java?

我们不能覆盖静态方法(至少在 Java 中)。

如果我想覆盖继承的静态方法,我可以通过嵌套调用我已覆盖的父 class 的非静态方法来实现吗?

class A {
.
.
static func(args) {..M(args)..}
.
.
<Type> M(args) {...}
.
.
}

class B extends A {
.
.
@Override
<Type> M(args) {...}
.
.
}

或者,此代码能否更改 func 的功能?

这是中断的地方:

I have defined the static method of A with the help of a nested call to M.

您不能从静态方法中调用 non-static 方法。

如果我没理解错的话,你想做的事情如下:

public class A {
    public static void staticMethod() {
        m();
    }
    public void m() {
        // do something here or leave it to the subclasses
    }
}

在我的 Eclipse 中,在调用 m() 时我得到

Cannot make a static reference to the non-static method m() from the type A

要调用 non-static 方法,您需要一个实例来调用它。例如,要问一个人的名字,你首先需要一个 person 对象,否则这个问题就没有意义。在静态上下文中,您没有任何实例。

当然,如果您可以设置一种情况,在 staticMethod 中您有一个 BC 的实例,那么您就成功了。然后你可以调用 myInstanceOfBOrC.m().

我认为您所追求的通常解决方案是从一开始就创建 BC 的实例,而不是将方法声明为静态的。然后使用通常的覆盖。单独为此目的创建一个实例可能感觉很浪费;但它有效。