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

时间:2013-04-21 23:13:40

标签: java

这与问题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中引用非静态方法。

1 个答案:

答案 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之前,您也无法覆盖这些方法。