0

我想要拥有所有具有相同方法的类家族。由于这种方法非常简单,我想让它成为最终静态的,比如

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

(实际上这个方法只返回字符串)。

有时,使用相同的方法对所有 A、B、C 类进行大转换会很有用。因此,我想创建母班。

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

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

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

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

你可以问这样的建设的目的是什么?

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

接口也无济于事。

唯一的解决方案似乎是从 Mother 类的 createSth 方法中删除 abstract 修饰符。但是后来我不允许对 Mother 类进行大写并为孩子调用 createSth 方法。所以我必须删除子类的静态修饰符。

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

4

3 回答 3

3

static方法(就像finaland private)不能被覆盖,所以没有办法在派生类中实现它们,所以让它们abstract没有意义。

于 2013-09-11T13:28:20.077 回答
2

静态方法不会被继承,因此将它们抽象化是没有意义的。

于 2013-09-11T13:27:51.050 回答
0

final方法没有得到overridden

static方法不获取overridden,但它们可以hidden在子类中。

于 2013-09-11T13:32:02.043 回答