在 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
中您有一个 B
或 C
的实例,那么您就成功了。然后你可以调用 myInstanceOfBOrC.m()
.
我认为您所追求的通常解决方案是从一开始就创建 B
或 C
的实例,而不是将方法声明为静态的。然后使用通常的覆盖。单独为此目的创建一个实例可能感觉很浪费;但它有效。
我们不能覆盖静态方法(至少在 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
中您有一个 B
或 C
的实例,那么您就成功了。然后你可以调用 myInstanceOfBOrC.m()
.
我认为您所追求的通常解决方案是从一开始就创建 B
或 C
的实例,而不是将方法声明为静态的。然后使用通常的覆盖。单独为此目的创建一个实例可能感觉很浪费;但它有效。