公共抽象静态方法 - 为什么不允许?

时间:2013-09-11 13:27:10

标签: java

我想拥有所有具有相同方法的类系列。由于这个方法非常简单,我想让它最终为静态,比如

class A {
   public static final String createSth () { }
}

(实际上这个方法只返回String)。

有时使用相同的方法向上投射所有A,B,C类是有用的。因此,我想创建母班。

class abstract Mother {
       public static abstract String createSth () { }
}

然后为我的所有类A,B,C ex添加适当的扩展。 A级扩展了母亲。

不幸的是,Java不允许这样做。我想知道为什么?

当然我可以删除静态最终修饰符,然后一切正常。但另一方面,如果每个子类返回不能以任何方式修改的常量String,为什么不呢?

您可以问这种建筑的目的是什么?

我只想创建数据库sql字符串。对于每个表我创建了一个单独的类,作为createSth方法的结果,我想返回sql为这个类创建一个表。

接口确实没有帮助。

唯一的解决方案似乎是从Mother类中的createSth方法中删除abstract修饰符。但是后来我不允许向母亲上课并为孩子们调用createSth方法。所以我必须删除子类的static修饰符。

总结为什么不允许抽象方法是静态的?好的,我甚至可以理解这一点,但是为什么非静态抽象方法不允许被子类中的静态方法替换?

3 个答案:

答案 0 :(得分:3)

static方法(就像finalprivate)无法覆盖,因此无法在派生类中实现它们,因此使它们abstract不会有道理。

答案 1 :(得分:2)

静态方法不会被继承,因此将它们抽象化将毫无意义。

答案 2 :(得分:0)

final方法未获得overridden

static方法无法获得overridden,但它们可以在子类中hidden