2013-04-21 123 views
-4

这与问题here几乎相同。“A不能是B的超级接口;一个超级接口必须是一个接口“

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

我可以将其更改为“A扩展B”,但然后我必须使我的方法非静态,并且只是将我的整个系统拧紧。

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

好吧,让我们说,我已经有了与方法AA和方法BB

public class A { 

    public static final BB(){ 

    } 
    public static final AA(){ 

    } 
    } 
} 

这组现在我已经得到了另一个类,它实现它,但它也有它的方法AA的自己的版本和A类BB。

public class AImpl implements A { 

    public BB(){ 

    } 
    public AA(){ 

    } 
    } 
} 

现在,如果我尝试扩展类,我会得到错误“实例方法不能覆盖静态方法从A”。

所以后来它说我可以从A类去除静态解决这个

我这样做,那么它告诉我,几乎所有其他的大概有50类不能引用从非静态方法A类的方法BB。

+1

您可以请发布您实际正在尝试做什么,最好是使用代码? – Antimony 2013-04-21 23:16:48

+0

在你给出的例子中,你的第一部分“代码”是一个类。你的第二部分试图实现它。类可以扩展类,但它们只能实现接口。 – jschabs 2013-07-10 19:24:31

回答

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仅仅是建立在B另一个a()方法。呼叫A.a()将调用A中的方法a(),类B.a()将调用B中的方法a()

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

无论如何,即使如果您可以覆盖static方法;你的也是final这使得这是不可能的。即使您删除了static,也将无法覆盖这些方法,除非您还删除了final

相关问题