我想拥有所有具有相同方法的类系列。由于这个方法非常简单,我想让它最终为静态,比如
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修饰符。
总结为什么不允许抽象方法是静态的?好的,我甚至可以理解这一点,但是为什么非静态抽象方法不允许被子类中的静态方法替换?
答案 0 :(得分:3)
static
方法(就像final
和private
)无法覆盖,因此无法在派生类中实现它们,因此使它们abstract
不会有道理。
答案 1 :(得分:2)
静态方法不会被继承,因此将它们抽象化将毫无意义。
答案 2 :(得分:0)
final
方法未获得overridden
static
方法无法获得overridden
,但它们可以在子类中hidden
。