Inheritance 是";“间接覆盖”;Java中可能使用的静态方法有哪些?
我们不能重写静态方法(至少在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)} . .
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
的实例,而不是将方法声明为静态。然后使用通常的覆盖。仅仅为此目的创建一个实例可能感觉像是浪费;但是它是有效的。重载静态方法当然是可能的,而重写是不可能的——您已经切换了它们。但即便如此,最好的解决方法还是为您想要尝试的内容编写代码,看看会发生什么,或者至少共享特定的代码,而不是代码描述。好的,让我们看看您想要尝试的代码。基本上,您必须从头开始实现每个方法,这里没有“自动”引用静态方法的方法。这就是为什么它们是“静态的”。重载静态方法当然是可能的,而重写是不可能的——您已经切换了它们。但即便如此,最好的解决方法还是为您想要尝试的内容编写代码,看看会发生什么,或者至少共享特定的代码,而不是代码描述。好的,让我们看看您想要尝试的代码。基本上,您必须从头开始实现每个方法,这里没有“自动”引用静态方法的方法。这就是为什么它们是“静态的”。我是说“覆盖”。对不起,弄错了。无论如何,我明白你的意思。谢谢你的快速澄清,并为这个荒谬的问题感到抱歉。不,这个问题很好。我们都会在某个时候碰壁,思考是否有办法获得你所要求的。这个问题也很容易对其他读者有所帮助。我的意思是“覆盖”。对不起,弄错了。无论如何,我明白你的意思。谢谢你的快速澄清,并为这个荒谬的问题感到抱歉。不,这个问题很好。我们都会在某个时候碰壁,思考是否有办法获得你所要求的。这个问题也很容易对其他读者有所帮助。