Java “;A不能是B的超级接口;超级接口必须是接口”;

Java “;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

这与所问的问题几乎相同

但我的问题延伸到了这一点

我可以把它改为“A扩展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中移除静态来解决这个问题


我这样做了,然后它告诉我,几乎所有其他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
方法在两个不同的类中调用同一个对象是没有意义的,因为这会导致静态导入出现问题,并给人一种印象,即一个类中的方法会覆盖另一个类。但事实并非如此


在任何情况下,即使您能够覆盖
静态
方法;你的也是
最终版
,这就不可能了。即使您删除了
静态
,您也将无法覆盖这些方法,除非您同时删除了
最终

您可以发布您实际尝试的操作,最好是使用代码吗?在您给出的示例中,“代码”的第一部分是一个类。您的第二部分尝试实现它。类可以扩展类,但它们只能实现接口。