Java “;A不能是B的超级接口;超级接口必须是接口”;
这与所问的问题几乎相同 但我的问题延伸到了这一点 我可以把它改为“A扩展B”,但我必须使我的方法非静态,这只会破坏我的整个系统 我有办法解决这个问题吗 好吧,假设我有一个a类,方法AA和方法BBJava “;A不能是B的超级接口;超级接口必须是接口”;,java,Java,这与所问的问题几乎相同 但我的问题延伸到了这一点 我可以把它改为“A扩展B”,但我必须使我的方法非静态,这只会破坏我的整个系统 我有办法解决这个问题吗 好吧,假设我有一个a类,方法AA和方法BB public class A { public static final BB (){ } public static final AA (){ } } } 现在设置好了,我有另一个类来实现它,但它也有自己版本的方法AA和BB public class A
public class A {
public static final BB (){
}
public static final AA (){
}
}
}
现在设置好了,我有另一个类来实现它,但它也有自己版本的方法AA和BB
public class AImpl implements A {
public BB (){
}
public AA (){
}
}
}
现在,如果我尝试扩展这个类,我将得到一个错误“实例方法不能从一个实例重写静态方法”
然后它说我可以通过从类A中移除静态来解决这个问题
我这样做了,然后它告诉我,几乎所有其他50个类都不能从类A的方法BB引用非静态方法。
接口
s不能有静态
方法。它们可以有静态final
常量,但不能有方法
如果您想拥有静态
方法,则需要使用抽象类
interface Iface {
void doStuff();
}
abstract class Base implements Iface {
static void doStaticStuff() {
}
}
编辑
不能重写静态方法。您也不能实现
其他类
您可以扩展其他类
除非将一个类中的方法设置为非静态
或将另一个类中的方法设置为静态
static class A {
static void a(){}
}
static class B extends A {
static void a(){}
}
你想做的事毫无意义。实例方法如何重写静态方法
请注意,这不会覆盖a
中的a()
方法,它只是在B
中创建另一个a()
方法。调用A.A()
将调用A
中的方法A()
,类B.A()
将调用B
中的方法A()
让static
方法在两个不同的类中调用同一个对象是没有意义的,因为这会导致静态导入出现问题,并给人一种印象,即一个类中的方法会覆盖另一个类。但事实并非如此
在任何情况下,即使您能够覆盖静态
方法;你的也是最终版
,这就不可能了。即使您删除了静态
,您也将无法覆盖这些方法,除非您同时删除了最终
您可以发布您实际尝试的操作,最好是使用代码吗?在您给出的示例中,“代码”的第一部分是一个类。您的第二部分尝试实现它。类可以扩展类,但它们只能实现接口。