这与问题here几乎相同。
但我的问题扩展了这一点。
我可以将其更改为“A extends B”但是我必须使我的方法非静态并且只是将我的整个系统搞砸了。
有什么方法可以解决这个问题吗?
好吧,假设我有A级方法AA和方法BB
public class A {
public static final BB (){
}
public static final AA (){
}
}
}
现在我已经设置了另一个实现它的类,但它也拥有它自己的方法AA和BB版本。
public class AImpl implements A {
public BB (){
}
public AA (){
}
}
}
现在,如果我尝试扩展类,我将得到错误“实例方法不能覆盖来自A的静态方法”。
然后它说我可以通过删除A类中的静态来解决这个问题。
我这样做然后它告诉我几乎所有其他可能50个类都不能从A类方法BB中引用非静态方法。
答案 0 :(得分:6)
interface
s不能有static
种方法。它们可以有static final
个常量,但不能有方法。
如果您想使用static
方法,则需要使用abstract class
interface Iface {
void doStuff();
}
abstract class Base implements Iface {
static void doStaticStuff() {
}
}
修改强>
您无法覆盖static
方法。你也不能implement
其他类。
您extend
其他课程。
除非您将一个类中的方法设为非static
,或者将方法设置为另一个类static
static class A {
static void a(){}
}
static class B extends A {
static void a(){}
}
你想要做的事情没有任何意义。实例方法如何覆盖static
方法?
请注意,不覆盖a()
中的A
方法,它只会在a()
中创建另一个B
方法。来电A.a()
将调用a()
中的方法A
,而班级B.a()
将调用a()
中的方法B
。
让static
方法在两个不同的类中调用相同的东西没有任何意义,因为它会导致静态导入问题并给人一种类中的方法会覆盖另一个类的印象。它没有。
在任何情况下,即使 if ,您也可以覆盖static
方法;你的final
也是不可能的。即使您删除了static
,在删除final
之前,您也无法覆盖这些方法。