Inheritance 是";“间接覆盖”;Java中可能使用的静态方法有哪些?

Inheritance 是";“间接覆盖”;Java中可能使用的静态方法有哪些?,inheritance,methods,static,overriding,non-static,Inheritance,Methods,Static,Overriding,Non Static,我们不能重写静态方法(至少在Java中是这样) 如果要重写继承的静态方法,可以通过对已重写父类的非静态方法的嵌套调用来实现吗 class A { . . static func(args) {..M(args)..} . . <Type> M(args) {...} . . } class B extends A { . . @Override <Type> M(args) {...} . . } A类{ . . 静态函数(args){..M(args)} . .

我们不能重写静态方法(至少在Java中是这样)

如果要重写继承的静态方法,可以通过对已重写父类的非静态方法的嵌套调用来实现吗

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

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

A类{
.
.
静态函数(args){..M(args)}
.
.
M(args){…}
.
.
}
B类扩展了A类{
.
.
@凌驾
M(args){…}
.
.
}

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

这是它中断的地方:

我已经在嵌套调用的帮助下定义了的静态方法 对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()进行静态引用

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

当然,如果您可以设置这样一种情况,即在
staticMethod
中,您得到了
B
C
的实例,那么您就到了。然后您可以调用
myinstanceofforc.m()


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

这就是它的缺点:

我已经在嵌套调用的帮助下定义了的静态方法 对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()进行静态引用

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

当然,如果您可以设置这样一种情况,即在
staticMethod
中,您得到了
B
C
的实例,那么您就到了。然后您可以调用
myinstanceofforc.m()


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

重载静态方法当然是可能的,而重写是不可能的——您已经切换了它们。但即便如此,最好的解决方法还是为您想要尝试的内容编写代码,看看会发生什么,或者至少共享特定的代码,而不是代码描述。好的,让我们看看您想要尝试的代码。基本上,您必须从头开始实现每个方法,这里没有“自动”引用静态方法的方法。这就是为什么它们是“静态的”。重载静态方法当然是可能的,而重写是不可能的——您已经切换了它们。但即便如此,最好的解决方法还是为您想要尝试的内容编写代码,看看会发生什么,或者至少共享特定的代码,而不是代码描述。好的,让我们看看您想要尝试的代码。基本上,您必须从头开始实现每个方法,这里没有“自动”引用静态方法的方法。这就是为什么它们是“静态的”。我是说“覆盖”。对不起,弄错了。无论如何,我明白你的意思。谢谢你的快速澄清,并为这个荒谬的问题感到抱歉。不,这个问题很好。我们都会在某个时候碰壁,思考是否有办法获得你所要求的。这个问题也很容易对其他读者有所帮助。我的意思是“覆盖”。对不起,弄错了。无论如何,我明白你的意思。谢谢你的快速澄清,并为这个荒谬的问题感到抱歉。不,这个问题很好。我们都会在某个时候碰壁,思考是否有办法获得你所要求的。这个问题也很容易对其他读者有所帮助。