Java中是否可以对静态方法进行“间接覆盖”?

问题描述

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

如果我想重写继承的静态方法,是否可以通过对已重写的父类的非静态方法的嵌套调用来做到这一点?

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

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

或者,此代码将能够更改func功能吗?

解决方法

这是坏处:

我已经借助嵌套调用定义了A的静态方法 到M。

您不能从静态方法中调用非静态方法。

如果我对您的理解正确,那么您想做些类似的事情:

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

在Eclipse中,我接到m()的电话

无法从类型A静态引用非静态方法m()

要调用非静态方法,您需要一个实例来对其进行调用。例如,要问一个人的名字,您首先需要一个人对象,否则这个问题就没有意义了。在静态环境中,您没有任何实例。

当然,如果您可以设置staticMethod内有BC实例的情况,那么您就在那里。然后,您可以致电myInstanceOfBOrC.m()

通常我认为您想得到的解决方案是从一开始就创建BC的实例,而不是将方法声明为静态。然后使用通常的覆盖。仅为此目的创建一个实例可能会很浪费。但是可以。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...