【问题标题】:“The A cannot be a superinterface of B; a superinterface must be an interface” [closed]“A 不能是 B 的超接口;超级接口必须是接口” [关闭]
【发布时间】:2013-04-14 18:30:25
【问题描述】:

这与here提出的问题几乎相同。

但我的问题延伸到了这个。

我可以将其更改为“A 扩展 B”,但我必须使我的方法成为非静态方法,这只会让我的整个系统崩溃。

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

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

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

【问题讨论】:

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

标签: java


【解决方案1】:

interfaces 不能有 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() 方法,它只是在B 中创建另一个a() 方法。调用A.a() 将调用A 中的a() 方法,B.a() 类将调用B 中的a() 方法。

让static 方法在两个不同的类中调用相同的东西实际上没有任何意义,因为它会导致静态导入问题,并给人一种印象,即一个类中的方法会覆盖另一个类。它没有。

在任何情况下,即使如果您能够覆盖static 方法;你的也是final,这使得这不可能。即使您删除了static,您也无法覆盖这些方法,除非您也删除了final。

【讨论】:

    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多