"A不能成为B的超级接口; 超级接口必须是一个接口"

-4 java

这与此处提出的问题几乎相同.

但我的问题扩展了这一点.

我可以将它更改为"A extends B"但是我必须使我的方法非静态并且只是将我的整个系统拧紧.

有什么办法可以解决这个问题吗?

好吧,假设我有一个方法AA和方法BB的A级

public class  A {

    public static final BB (){

    }
     public static final AA (){

    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我已经设置了另一个实现它的类,但它也拥有自己的方法AA和BB版本.

public class AImpl implements A {

    public BB (){

    }
     public AA (){

    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试扩展类,我将得到错误"实例方法不能覆盖来自A的静态方法".

所以它说我可以通过删除A类中的静态来解决这个问题.

我这样做然后它告诉我几乎所有其他可能50个类都不能从类A的方法BB中引用非静态方法.

Bor*_*der 6

interfaces不能有static方法.它们可以有static final常量而不是方法.

如果你想拥有static需要使用的方法abstract class

interface Iface {
    void doStuff();        
}

abstract class Base implements Iface {
    static void doStaticStuff() {

    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

你不能覆盖static方法.你也不能implement其他课程.

extend其他的课程.

除非您将一个类中的方法设为非,static或者将方法设置为另一个类,否则无法解决您的问题static

static class A {
    static void a(){}
}

static class B extends A {
    static void a(){}
}
Run Code Online (Sandbox Code Playgroud)

你想做什么没有任何意义.实例方法如何覆盖static方法?

请注意,这并不能覆盖a()方法A仅仅是建立了另一种a()在方法B.呼叫A.a()会调用该方法a()A和班B.a()会调用该方法a()B.

static方法在两个不同的类中调用相同的东西并没有多大意义,因为它会导致静态导入问题,并且给人的印象是一个类中的方法会覆盖另一个类.它没有.

在任何情况下,即使如果你能覆盖static的方法; 你的也是final不可能的.即使你删除了static你也无法覆盖方法,直到你删除final.