-5

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

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

我可以将其更改为“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 中引用非静态方法。

4

1 回答 1

6

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它只是a()B. 该调用A.a()将调用 in 中的方法a()A而该类B.a()将调用a()in 中的方法B

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

无论如何,即使能够覆盖static方法;你的也是final这使得这不可能。即使您删除 ,static您也无法覆盖方法,直到您也删除final.

于 2013-04-21T23:18:16.633 回答